标题:
STC89C52单片机串口通迅程序+3个定时器 合适新手学习
[打印本页]
作者:
ssk7793
时间:
2019-3-19 19:43
标题:
STC89C52单片机串口通迅程序+3个定时器 合适新手学习
合适新手学习的51单片机串口收发及定时器, 多文件结构, 我尽量备注详细
方便在此基础上开发跟串口相关的应用
JD20190319194003.png
(3.38 KB, 下载次数: 54)
下载附件
2019-3-19 19:40 上传
单片机源程序:
/***********************************
* STC89/90 系列 *
***********************************/
//定时器相当于电脑的多任务,多线程
#include "config.h" //公共变量
#include "command.h" //公共函数
#include "UART.h" //串口文件
//****************** 主程序 *******************
void main()
{
//打开串口
SCON = 0x50; // SCON: 模式 1, 8-bit UART, 使能接收
//定时器0 对应interrupt 1
TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
ET0=1; //定时器0中断打开
TR0=1; //定时器0开关打开
//定时器1 对应interrupt 4
TMOD |= 0x20; // TMOD: timer 1, mode 2, 8-bit reload
TH1 = 0xFD; // TH1: reload value for 9600 baud @ 11.0592MHz
TR1 = 1; //定时器1开关打开
//定时器2 对应interrupt 5
RCAP2H = (65536-50000)/256;
RCAP2L = (65536-50000)%256;
ET2 = 1; //定时器2中断打开
TR2 = 1; //定时器2开关打开
EA = 1; //打开总中断
ES = 1; //打开串口中断
i1=0,i2=0;i3=0;cmd1=0;
while (1) { //无限循环
UART_main(); //串口接收发送
}
}
//********** 定时器0 ***********
void time0() interrupt 1
{
TH0=0x00;TL0=0x00; //重新赋值,必需
/*i3++;
if(i3>20){
LED1=~LED1;
i3=0;
}*/
}
//********** UART的定时器1中断程序 ***********
void time1() interrupt 4
{
if(RI) { //判断是接收中断产生
RI=0; //标志位清零
if(SBUF!='~'){ //如果结尾不是~符号
Tbuf1[i1]=SBUF; //值存到数组
}
i1++; //累加
if(SBUF=='~'){ //如果值为~符号
cmd1=1; //设结束标志
}
}
if(TI) { //如果是发送标志位,清零
TI=0;
}
}
//********** 定时器2 ***********
void time2() interrupt 5
{
TF2=0;
i3++;
if(i3>10){
LED1=~LED1;
i3=0;
}
}
复制代码
全部资料51hei下载地址:
STC89C52串口通迅+3个定时器.zip
(29.36 KB, 下载次数: 52)
2019-3-19 19:42 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1