找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

单片机串行控制流水灯 keil没报错,但是proteus调试不出来,求大佬指点

查看数: 4144 | 评论数: 3 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2020-12-11 21:38

正文摘要:

本帖最后由 sunminda 于 2020-12-12 17:05 编辑 用串行控制流水灯,我编的程序,keil没报错,但是proteus调试不出来,求大佬指点 单片机源程序如下: #include<reg51.h> #include<intrins.h> unsign ...

回复

ID:857618 发表于 2020-12-13 09:25
wulin 发表于 2020-12-12 09:47
给你改了,你试试。

非常感谢,设计要求是0x02时继续流水灯,但是我试了一下我的程序,好像达不到我想要的效果
ID:18297 发表于 2020-12-12 18:42
在仿真电路中,你的max232不需要,compim和单片机的uart口直接接。建议先编写个简单的程序比如单片机接收到00关灯,01开灯,来判断仿真硬件没错。
ID:213173 发表于 2020-12-12 09:47
给你改了,你试试。
  1. #include<reg51.h>
  2. #include<intrins.h>

  3. unsigned char i,j,Temp;
  4. bit flag=0;

  5. void UART_SER(void)
  6. {
  7.         switch(Temp)
  8.         {
  9.                 case 0x55:j=_cror_(j, 1);P1=j;break;//右移
  10.                 case 0xAA:j=_crol_(j, 1);P1=j;break;//左移
  11.                 case 0x01:P1=j;break;                                        //停止移动
  12.                 default:P1=0xff;break;                                        //关闭
  13.         }
  14. }

  15. void time0_SER(void) interrupt 1 using 2
  16. {
  17.         TH0=0x3C;
  18.         TL0=0xB0;
  19.         i++;
  20.         if(i>=10)//0.5s
  21.         {
  22.                 i=0;
  23.                 flag=1;
  24.         }
  25. }

  26. void main(void)
  27. {
  28.         TMOD=0x21;//定时器0方式1,定时器方式2(8位重载)
  29.         TH0=0x3C; //50ms
  30.         TL0=0xB0; //50ms
  31.         TH1=0xfd;//定时器1重载 波特率9600
  32.         TL1=0xfd;//定时器1重载
  33.         TR0=1;        //开定时器0
  34.         TR1=1;        //开定时器1
  35.         REN=1;        //允许串行接收
  36.         SM0=0;        //设置串口方式1
  37.         SM1=1;        //设置串口方式1
  38.         EA =1;   //开总中断
  39.         ET0=1;   //开T0中断       
  40.         j=0xfe;
  41.         while(1)
  42.         {
  43.                 if(RI)                //查询接收中断请求标志位为1(已收到)
  44.                 {
  45.                         RI=0;                //接收中断请求标志位清0
  46.                         Temp=SBUF;                //获取接收寄存器数据
  47.                 }
  48.                 if(flag)                //0.5s定时标志1
  49.                 {
  50.                         flag=0;
  51.                         UART_SER();
  52.                 }
  53.         }
  54. }

复制代码

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表