📄 kenshin.c
字号:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit fud=P2^1; //加载AD9851的外部寄存器到内部寄存器的操作引脚
sbit clk=P2^0; //读取并口上的数据到外部寄存器的操作引脚
sbit res=P2^2; //AD9851的重启引脚
sbit max=P2^3; //MAX485的半双工控制引脚
uchar W[5]; //AD9851控制字存储叔祖
uchar temp; //临时变量
uchar p;
uchar i;
void TransData(void) //数据传输函数
{
max=1; //将MAX485工作方式设定为发送
SBUF='R'; //向PC机发送R,表示数据接收完全
while(!TI); //等待发送完毕
TI=0; //清除发送中断标志
max=0; //将MAX485工作方式设定为发接收
for(i=0;i<5;i++) //传数据
{
P1=W[i]; //P1口引脚输出等于W[i]
clk=1; //W_CLK上升沿将AD9851并口上的数据读进内部寄存器
clk=0;
}
fud=1; //5个控制字发送完后,在FQ_UD上升沿将数据加载
fud=0; //到内部寄存器,并改变输出
}
void Init_serial() //初始化串口函数
{
TMOD=0x20; //定时器1置为方式2
TL1=0xfd; //装载定时器初值,设置波特率为9600
TH1=0xfd;
SCON=0x50; //设定串口工作方式1
PCON=0x00; //不使用波特率倍增
TR1=1; //启动定时器
EA=1; //开总中断
ES=1; //开串行口中断
max=0; //MAX485工作方式设定为读
}
void main() //main函数
{
clk=0; //初始化
fud=0;
res=1; //RESET AD9851
res=0;
Init_serial(); //调用串口初始化函数
W[0]=0x01; //启用AD9851的6倍频功能
p=1;
while(1); //等待中断
}
void Serial_RI(void) interrupt 4 using 3 //中断程序
{
ES=0; //关串行口中断
if(RI==1) //如果是接收中断,执行下面函数
{
RI=0; //清除中断标志位
temp=SBUF; //读取接收寄存器
W[p]=temp; //设定控制字
max=1; //MAX485设定为发送
SBUF=temp; //将接收到的字节再发送回PC,检验是否接收正确
while(!TI); //等待发送完毕
TI=0; //清除发送中断标志
max=0; //MAX485设定为接收
p++; //p自加
if(p==5) //当p=5时,表示接收完成,向AD9851发送数据
{
TransData(); //调用数据发送函数
p=1; //将P重新设定为1
}
}
ES=1; //开串行口中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -