完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
#include "reg51.h"
#include "intrins.h" typedef unsigned char BYTE; typedef unsigned int WORD; #define FOSC 11059200L //系统频率 #define BAUD 9600 //串口波特率 #define NONE_PARITY 0 //无校验 #define ODD_PARITY 1 //奇校验 #define EVEN_PARITY 2 //偶校验 #define MARK_PARITY 3 //标记校验 #define SPACE_PARITY 4 //空白校验 #define PARITYBIT EVEN_PARITY //定义校验位 sfr P0M1 = 0x93; sfr P0M0 = 0x94; sfr P1M1 = 0x91; sfr P1M0 = 0x92; sfr P2M1 = 0x95; sfr P2M0 = 0x96; sfr P3M1 = 0xb1; sfr P3M0 = 0xb2; sfr P4M1 = 0xb3; sfr P4M0 = 0xb4; sfr P5M1 = 0xC9; sfr P5M0 = 0xCA; sfr P6M1 = 0xCB; sfr P6M0 = 0xCC; sfr P7M1 = 0xE1; sfr P7M0 = 0xE2; sfr AUXR = 0x8e; //辅助寄存器 sfr T2H = 0xd6; //定时器2高8位 sfr T2L = 0xd7; //定时器2低8位 sfr P_SW1 = 0xA2; //外设功能切换寄存器1 #define S1_S0 0x40 //P_SW1.6 #define S1_S1 0x80 //P_SW1.7 ***it P22 = P2^2; ***it P30=P3^0; bit busy; BYTE RXtemp; bit RX_flag=0; //接收到串口数据标志 //延时函数 void delay(WORD t) { WORD t1; for(;t>0;t--) { for(t1=0;t1<200;t1++); } } void main() { P0M0 = 0x00; P0M1 = 0x00; P1M0 = 0x00; P1M1 = 0x00; P2M0 = 0x00; P2M1 = 0x00; P3M0 = 0x00; P3M1 = 0x00; P4M0 = 0x00; P4M1 = 0x00; P5M0 = 0x00; P5M1 = 0x00; P6M0 = 0x00; P6M1 = 0x00; P7M0 = 0x00; P7M1 = 0x00; ACC = P_SW1; ACC &= ~(S1_S0 | S1_S1); P_SW1 = ACC; #if (PARITYBIT == NONE_PARITY) SCON = 0x50; //8位可变波特率 #elif (PARITYBIT == ODD_PARITY) || (PARITYBIT == EVEN_PARITY) || (PARITYBIT == MARK_PARITY) SCON = 0xda; //9位可变波特率,校验位初始为1 #elif (PARITYBIT == SPACE_PARITY) SCON = 0xd2; //9位可变波特率,校验位初始为0 #endif T2L = (65536 - (FOSC/4/BAUD)); //设置波特率重装值 T2H = (65536 - (FOSC/4/BAUD))>>8; AUXR = 0x14; //T2为1T模式, 并启动定时器2 AUXR |= 0x01; //选择定时器2为串口1的波特率发生器 ES = 1; //使能串口1中断 EA = 1; while(1) { } } /*---------------------------- UART 中断服务程序 -----------------------------*/ void Uart() interrupt 4 { if (RI) { RI = 0; RXtemp = SBUF; switch(RXtemp) { case '1':P30=1; break; case '2':P30=0; break; } //清除RI位 } if (ti) { TI = 0; //清除TI位 //清忙标志 } } 发送1时,LED灯亮,发送0时,LED灯不能关掉,这是什么原因,如果LED没有打开前提下,再去发送0,LED灯会闪一下,这是什么原因,求大家帮忙 |
|
相关推荐
2个回答
|
|
持续发送零也不行吗?
|
|
|
|
回帖奖励 +1 分积分
看了你的代码,RXtemp应该是串口接受的BUF一个字节
P30引脚:不知道你的硬件怎么接,应该是接LED灯, (case '1':P30=1;)如果是 ‘1’ 字符:P30输出高电平,LED亮。 (case '2':P30=0;)如果是 ‘2’ 字符:P30输出低电平,LED灭。 ‘0’字符不执行动作 RI在哪定义? |
|
|
|
只有小组成员才能发言,加入小组>>
12145 浏览 2 评论
4480 浏览 3 评论
3710 浏览 5 评论
9596 浏览 47 评论
4526 浏览 9 评论
718浏览 0评论
523浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-30 13:57 , Processed in 0.577542 second(s), Total 57, Slave 45 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号