① 51单片机串口通讯,怎么发送数据串口调试精灵收不到啊
真的很滥。这是一个发I Like You!的程序,简单实用。
没用中断,
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar idata w[]="I Like You! "; //数据定义
void delay(uchar);
void main(void)
{
uchar count;
TMOD=0X20; //工作在方式2
TL1=0xfd; //T1波特率9600bps
TH1=0xfd; //串行工作在方式3
SCON=0xd8;
TR1=1; //启动T1
while(1)
{
count=0;
while(*(w+count)) //判断一串数据是否结束
{
SBUF=*(w+count); //发送数据
while(TI==0); //查询发送是否结束
TI=0; //清除发送一标志位
count++; //准备发送一个数据
}
delay(100);
}
}
void delay(uchar times) //延时子程序
{
uchar i;
while(times--);
for(i=0;i<120;i++){}
}
② 51单片机的外部中断的程序怎么弄啊
在编程时,为了实现定时器0的中断功能,可以参考以下代码:
void intTIME0 (void) {
TMOD = 0x01; // 设置定时器方式为1
TL0 = (65536-50000) % 256; // 设置定时器初值
TH0 = (65536-50000) / 256;
ET0 = 1; // 开启定时器中断
EA = 1; // 开启总中断
TR0 = 1; // 启动定时器计数
}
接下来,实现定时器0的中断处理函数如下:
void tm0_isr() interrupt 1 using 1 {
// 这里可以加入自己的代码
}
需要注意的是,interrupt 1中的1代表中断号1,如果使用的是外部中断0,则使用interrupt 0;如果是外部中断1,则使用interrupt 2;如果需要处理定时器1中断,则使用interrupt 3;而串口中断则使用interrupt 4。
在tm0_isr()函数中,可以根据具体需求添加相应的代码逻辑,例如处理定时器超时、执行特定任务等。
通过以上代码,可以实现定时器0的初始化和中断处理,进一步提升程序的功能性和实用性。