使用delay函数能串口能接收到字符串。但是,中断就悲剧了想来很久,还是不知道原因在哪里。求解。。。
#include <reg51.h>typedef unsigned char uint8;typedef unsigned int uint16;
uint16 cnt=0;
uint8 Buf[]="hello world!
";
void delay(uint16 ms){
uint8 i;
while(ms--)
{
for(i=0;i<120;i++);
}
}
void UART_init(void){
ES=1;
EA=1;
SCON=0x50;
TMOD=0x20;//
TMOD=0x21;
PCON=0x00;
//
TH0=0xD8;
//设置定时器0//
TL0=0xF0;
TH1=0xFA;
//设置波特率
TL1=0xFA;
//
TR0=1;
TR1=1;
//
ET0=1;
ET1=0;}
void UART_send_byte(uint8 dat){
SBUF=dat;
while(TI==0);
TI=0;}
void UART_send_string(uint8 *buf){
while(*buf!=' ')
{
UART_send_byte(*buf++);
}}
main(){
UART_init();
while(1)
{
UART_send_string(Buf);
delay(1000);
}//
while(1);}/*void timeint() interrupt 1{
cnt++;
TH0=0xD8;
TL0=0xF0;
if(cnt==200)
{
UART_send_string(Buf);
cnt=0;
}
}
*/
此帖出自
小平头技术问答
#include
unsigned char flag;
unsigned int a;
sbit speak = P3^7;
void delay(unsigned char num)
{
unsigned char i;
for(i = 0; i < num; i++);
}
void init_uart() //初始化串口
{
SCON=0x50; //UART 工作模式1,REN=1
TMOD=0x20; //定时器工作方式2
PCON=0x00; //SMOD=0
TH1=0xFD; //定时器重装初值
TL1=0xFD;
EA=1; //允许中断
ES=1; //开串口中断
TR1=1; //启动定时器1
}
void main()
{
init_uart(); //初始化串口
speak = 0;
while(1)
{
if(flag==1)
{
ES=0; //关串口中断
flag=0;
SBUF=a; //发送数据
while(TI==0);
TI=0;
ES=1;
}
}
}
void serial() interrupt 4 //串口中断响应函数
{
RI=0;
a=SBUF; //接收数据
flag=1;
}
这个程序运行时发送接收是正常的,但只要是在while(1){ }中加入其它函数就不正常,比如加一个延时函数delay(50),向单片机发送0x11,单片机返回给PC机的是0x1或是011,这是什么原因呢?
一周热门 更多>