1、打开C51程序书写软件,新建工程,在d出的对话框编辑工程名并保存到要保存的地方。
2、保存之后会d出如下的窗口,点击Atmel的加号,选择AT89s52并确定。
3、此时就要开始建立程序了,点击如图的图标,新建程序,注意保存的时候一定要在名字后面加“.c”。
4、此时点击左边的文件夹,双击,会出现下一级的文件夹,继续双击,d出对话框中找到刚保存的C程序。双击它或者点击对话框下面的add,关闭d出的对话框,此时建立工程就完毕了。
5、点击窗口的Target 1左边的图标,选择如图的标签。勾选红色标注的地方(生成hex文件)。
6、 这样就进行后面的书写程序,编译吧。然后进入下一步,烧写程序,点击打开“打开程序文件”。到保存程序的地方,选中后缀为hax的文件并双击。
7、点击下载,此之前要连接单片机开发板,并且开发板电源处于关闭。
首先,你要用软件允许中断,即C语言中EA=1//允许总中断ES=1//允许串口中断汇编中可用SETBEA允许总中断SETBES允许串口中断当单片机接收到一帧数据后,RI会置1,向CPU申请中断,若之前有中断允许,则产生了中断,进入中断服务程序。
当然,单片机发送完一帧数据,TI也会置1,同样会产生中断!一般我们在发送数据时要关中断,因为一般你不用在发送时不用处理数据;接收数据时要开中断,以便你在中断服务程序中将接收到的数据进行存储并处理。补充:其实,不管你有没有允许中断,上位机(此时即给单片机发送信息的机器)只要给单片机发送数据,单片机就会自动接收数据,并把它放在数据缓冲器SBUF中,如果你之前有允许串行口中断,RI就会置1,向单片机CPU申请中断,并进入中断服务程序,即你问题中的serial()函数,做完这个函数后就会自动返回断点。
如果你没有允许中断,便不会产生串行中断。
其实,你的问题有个错误:别的中断都是某个I/O口电平变化产生。
这只是外部中断产生条件,不过,你之前也需要用软件允许外部中断。
另外,常见的51系列单片机有5个中断源三种中断5:
1、外部中断0和1;
2、定时器/计数器溢出中断0和1;
3、串行口中断。
另外,STC51系列还有定时器/计数器T2中断,A/D转换中断,PWM中断,串行中断2等等。你还有什么不懂的可以自己多翻一翻书,学到后面去了你就明白了。
你的问题中那个serial()函数中P1=SBUF是把接收的数据送到并行P1口,然后那条RI=0是不可少的,这是用软件清零RI,准备再次接受一帧数据产生中断,如果你没有这条语句,就会进入死循环,出不来了。有什么问题还可以Q我(1445090023),希望能给我评个最佳答案。
串口收发,要有通信协议。也就是什么时候开始接收,接收到指令后,转发什么数据。这个要知道,才可以写。而且使用不同的51单片机,其内部寄存器配置是不同的。一般来说,过程如下:
1,配置串口参数、波特率等,开启串口中断;
void Init_UART()
{
}
2,中断函数里写中断响应函数,根据接收的指令或者数据,执行相应的动作;
程序一般为:
void UART_ISR() interrupt x using y
{
串口中断处理函数
}
x - 单片机的C51中断号
y - 指定使用的当前工作寄存器组号(0-3 PSW中的RS0,RS1组合)
3,主程序
int main(void)
{
Init_UART()
while(1)
{
//数据发送函数
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)