查看: 325|回复: 2

跪求单片机的汇编写的正旋波形

[复制链接] qrcode

9

主题

23

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2006-1-26 08:04 AM | 显示全部楼层 |阅读模式
跪求单片机的汇编写的正旋波形                                                                                                                                                                       
回复

使用道具 举报

0

主题

17

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2006-2-10 11:33 AM | 显示全部楼层
男人膝下有黄多啊!                                                                                                                                                                       
回复 支持 反对

使用道具 举报

0

主题

17

帖子

38

积分

新手上路

Rank: 1

积分
38
发表于 2006-2-10 01:05 PM | 显示全部楼层
程序清单
下面给一个例程。该程序利用MAX518进行D/A转换,且从D/A0引脚输出一个正弦波形。可作为读者编制程序的参考。特别注意,在调试该程序时,把模板上的钮子开关S8拔向高电平,以免发生资源冲突。
#include<pic.h>
//本程序将通过PIC16F877的I2C方式驱动D/A转换器MAX518,使其D/A0通道输出
//一个连续的正弦波形(注:本程序并没对正弦波的频率进行控制)
const char table[ ] = {0X80,0X86,0X8D, 0X93,0X99,0X9F,0XA5,0XAB,
0XB1,0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,0X76,0X7C};
//以上的数组用于存放正弦表,在定义数组时,前面应该加上 const,
//以使数组存放于ROM中,而不至于占用太多的RAM
unsigned char i;
unsigned char j;
unsigned char n;
//I2C初始化子程序
voidi2cint()
{
SSPCON = 0X08;//初始化SSPCON寄存器
TRISC3 =1;//设置SCL为输入口
TRISC4 =1;//设置SDA为输入口
TRISA4 = 0;
SSPSTAT=0X80;//初始化SSPSTAT寄存器
SSPADD=0X02;//设定I2C时钟频率
SSPCON2=0X00;//初始化SSPCON2寄存器
di();//关闭总中断
SSPIF=0;//清SSP中断标志
RA4=0;//关掉74HC165的移位时钟使能,以免74HC165
//移位数据输出与I2C总线的数据线发生冲突
SSPEN=1;//SSP模块使能
}
//I2C总线输出数据子程序
voidi2cout()
{
SEN=1;//产生I2C启动信号
for(n=0x02;--n;)continue;//给予一定的延时,保证启动
do{
RSEN=1;//产生I2C启动信号
}while(SSPIF==0);//如果没能启动,则反复启动,直到启动为止
SSPIF=0;//SSPIF标志清0
SSPBUF=0X58;//I2C总线发送地址字节
do{

}while(SSPIF==0);//等待地址发送完毕
SSPIF=0;//SSPIF标志清0
SSPBUF=0X01;//I2C总线发送命令字节
do{

}while(SSPIF==0);//等待命令发送完毕
SSPIF=0;//SSPIF标志清0
SSPBUF=j;//I2C总线发送数据字节
do{

}while(SSPIF==0);//等待数据发送完毕
SSPIF=0;//SSPIF标志清0
PEN=1;//产生停止条件
do{

}while(SSPIF==0);//等待停止条件产生
SSPIF=0;//SSPIF标志清0
}
//主程序
main ()
{
i2cint();//I2C初始化
while(1){
for(i=0x00;i<=127;++i)
{
j=table[i];//从数组中得到需要传输的数据量
i2cout();//利用I2C总线方式送出数据
}
}
}
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表