📄 com.c
字号:
/*
本程序用于中断方式的串口通信演示
设置一个bit: com_sended 作为 sbuf = 0些5 执行完毕标志(以免和串口中断争用)
本段程序可以用于 51串口之自发自收演示工作
作者: haokeer
时间: 07.2.13
版权申明: 所有权力作者保留
*/
#include <stdio.h>
#include <REG2051.H>
unsigned char recbuf0,recbuf1,recbuf2,recbuf3,recbuf4;
unsigned int count1;
unsigned int x2;
unsigned int x3;
bit com_sended ;
void delay1(){
unsigned int x1,x2,x3;
for(x1=0;x1<10;x1++){
for(x2=0;x2<10;x2++){
for(x3=0;x3<10;x3++){
x2+=1;
x3+=1;
x2-=1;
x3-=1;
}
}
}
}
void main(void) {
//初始化串行口和波特率发生器
SCON =0x58; //选择串口工作方式,打开接收允许
TMOD =0x21; //定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfd; //实现波特率9600(系统时钟11.0592MHZ)
TR1 =1; //启动定时器T1
ET1 =0;
ES=1; //允许串行口中断
EA = 1; //单片机中断允许
com_sended = 0;
// RS232 = 1;
while(1){
SBUF = 0x55 ;
while(com_sended == 0);
com_sended = 0;
SBUF = 0x08 ;
while(com_sended == 0);
com_sended = 0;
SBUF = 0x09 ;
while(com_sended == 0);
com_sended = 0;
SBUF = 0x0a ;
while(com_sended == 0);
com_sended = 0;
SBUF = 0x0b ;
while(com_sended == 0);
com_sended = 0;
SBUF = 0x0c ;
while(com_sended == 0);
com_sended = 0;
count1+=1;
delay1();
}
}
//串口中断处理
serial () interrupt 4
{
if (TI) {
TI = 0;
com_sended = 1;
}
if (RI){
RI = 0;
recbuf0 = SBUF;
recbuf4 = recbuf3;
recbuf3 = recbuf2;
recbuf2 = recbuf1;
recbuf1 = recbuf0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -