合适新手学习的51单片机串口收发及定时器, 多文件结构, 我尽量备注详细
方便在此基础上开发跟串口相关的应用
单片机源程序:
- /***********************************
- * 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)
|