久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3103|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

幫忙看看程序有什么問(wèn)題,用protuse仿真串口接收不到信息

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:347760 發(fā)表于 2018-7-2 16:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
100黑幣
具體是用串口不間斷發(fā)送ASCII  回車(chē)(CR)  換行(LF)  數(shù)字  數(shù)字 數(shù)字  小數(shù)點(diǎn) 數(shù)字 數(shù)字
  但是仿真時(shí)接收不到

  1. #include <iom32v.h>
  2. #include <macros.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. #define CR 0x0D
  6. #define LF 0x0A
  7. #define H_Bit(val, bitn)  (val |=(1<<(bitn))) // bitn位置1
  8. #define L_Bit(val, bitn)  (val&=~(1<<(bitn))) // bitn位置0
  9. #define G_Bit(val, bitn)  (val &(1<<(bitn)) ) //取bitn的值
  10. #define time_bps()  {while(!flag_bps);flag_bps=0;}  //波特率延時(shí)
  11. uchar bit_c=0;                                           //數(shù)碼管位選
  12. uchar bit_data[3];                                        //數(shù)碼管(四)顯示數(shù)據(jù)
  13. uchar Dp_flag_L=0;                       //精確0.01小數(shù)點(diǎn)
  14. uchar Dp_flag_H=0;                       //精確0.1小數(shù)點(diǎn)
  15. uchar Dp_flag_D=0;                       //調(diào)試功能小數(shù)點(diǎn)
  16. uchar Dp_flag=0;                     //數(shù)碼管小數(shù)點(diǎn)總標(biāo)志位

  17. uint counter=0;
  18. uint counter_2ms=0;
  19. uint counter_20ms=0;
  20. int k=0;
  21. uchar const show[]={0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  22.                     0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  23.                                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  24.                                         0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  25.                                         0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x00,0x3F,0x06,
  26.                                         0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x80,
  27.                   //  C    H
  28.                                         0x39,0x76                                           };//對(duì)應(yīng)ACSII碼

  29. volatile uchar RXD_Data[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//用于接收長(zhǎng)度為8的數(shù)據(jù)
  30. volatile uchar RUDR; //接收數(shù)據(jù)暫存
  31. volatile uchar z=0;                             //接收探頭信息計(jì)位
  32. uchar TUDR=0;              //模擬IO發(fā)送數(shù)據(jù)緩存區(qū)  //UDR
  33. volatile uchar flag_bps=0;       //104us標(biāo)志位
  34. #define MK_RXD PINA1  //   模擬RXD
  35. #define MK_TXD PIND3  //   模擬TXD



  36. /*************************/
  37. uchar IO_UART_RXD(void) //接收
  38. {  
  39.   uchar i=0x00;
  40.   uchar RUDR=0x00;
  41.   while(G_Bit(PORTA,MK_RXD));
  42.   time_bps();     //延時(shí)104US
  43.   while(i<8)
  44.   {
  45.     RUDR>>=1;
  46.     if(G_Bit(PORTA,MK_RXD))  
  47.       {
  48.         RUDR|=0x80;
  49.       }
  50.       i++;
  51.       time_bps();   
  52.   }
  53.      while(!G_Bit(PORTA,MK_RXD));//接收完8位信息
  54.          time_bps();
  55. return RUDR;
  56. }
  57. void rx_com(uchar IO_UART_RXD)
  58. {
  59.   if(IO_UART_RXD==0x0D||IO_UART_RXD==0x0A||k>0) //接收的信息是否為回車(chē)或者換行,是則置零
  60.          {            
  61.            k++;
  62.      if(IO_UART_RXD>=0x30&&IO_UART_RXD<=0x39||IO_UART_RXD==0x2E)
  63.             {
  64.                   RXD_Data[z]=IO_UART_RXD;
  65.               z++;
  66.                   if(z=9)
  67.                         {
  68.                           z=0;
  69.                           k=0;
  70.                         }
  71.                  }
  72.           }         
  73. }
  74. void IO_UART_TXD(uchar TXD_Data)    //發(fā)送
  75. {
  76.   uchar j;
  77.   uchar TUDR;   //發(fā)送緩沖寄存器
  78.   TUDR=TXD_Data;
  79.   L_Bit(PORTD,MK_TXD);//發(fā)送起始位START  
  80.   time_bps();
  81.   while(j<8)
  82.    {      
  83.      if(TUDR & 0x01)    //取0x01位的值,先發(fā)送低位
  84.        {
  85.              H_Bit(TUDR,MK_TXD);
  86.            }
  87.      else
  88.        {
  89.             L_Bit(TUDR,MK_TXD);
  90.            }
  91.      TUDR>>=1;   
  92.      j++;
  93.            time_bps();   
  94.    }
  95.   H_Bit(PORTD,MK_TXD);//發(fā)送STOP信號(hào)
  96.   time_bps();
  97. }
  98. void LED_bit()
  99. {
  100.         bit_c++;
  101.         bit_c &= 0x03;                     //0000 0011
  102.         PORTC &= ~0xFF;                                 //0000 0000
  103.         switch(bit_c)
  104.         {        
  105.                 case 0x00:
  106.                                         PORTB&=0xF0;                           //1
  107.                         PORTB|=0x07;         //0000 0111              
  108.                 break;
  109.                 case 0x01:        
  110.                                                 PORTB&=0xF0;                                                   //2
  111.                         PORTB|=0x0B;         //0000 1011  
  112.                 break;
  113.                 case 0x02:        
  114.                                                 PORTB&=0xF0;                                                  //3
  115.                         PORTB|=0x0D;         //0000 1101  
  116.                 break;
  117.                 case 0x03:
  118.                                                 PORTB&=0xF0;                                              //4
  119.                         PORTB|=0x0E;         //0000 1110  
  120.                 break;
  121.                 default:
  122.                                 break;
  123.         }               
  124.         PORTC = show[bit_data[bit_c]];
  125.         if(!Dp_flag)
  126.         {
  127.                if((Dp_flag_D==1)&&(bit_c==0x03))                    //4
  128.                                     PORTC |= 0x80;
  129.                    else if((Dp_flag_L==1)&&(bit_c==0x02))              //3
  130.                                              PORTC |= 0x80;
  131.                         else if((Dp_flag_H==1)&&(bit_c==0x01))             //2
  132.                                                   PORTC |= 0x80;
  133.                              else   PORTC &= ~0x80;
  134.         }
  135. }
  136. void Display()    //顯示接收信息
  137. {
  138.   Dp_flag=1;      //小數(shù)點(diǎn)標(biāo)志位開(kāi)  
  139.   if(RXD_Data[0])  //顯示百位,精確0.1  //j=0,1,2,3,4,5分別為百位十位個(gè)位
  140.                                            //小數(shù)點(diǎn) 0.1位 0.01位
  141.   {  Dp_flag_H=1;
  142.      bit_data[0]=RXD_Data[0];
  143.      bit_data[1]=RXD_Data[1];
  144.          bit_data[2]=RXD_Data[2];
  145.          bit_data[3]=RXD_Data[4];
  146.    }
  147.    else                 //顯示十位,精確0.01
  148.    {
  149.      Dp_flag_L=1;
  150.      bit_data[0]=RXD_Data[1];
  151.          bit_data[1]=RXD_Data[2];
  152.          bit_data[2]=RXD_Data[4];
  153.          bit_data[3]=RXD_Data[5];
  154.    }
  155. }
  156. void port_init(void)
  157. {
  158.      PORTA = 0x00;      // PORTA口初始化   
  159.      DDRA  = 0xC1;      //1100 0000 指示燈 置位輸出    MK_RXD PA1=0
  160.      PORTB = 0xFF;      // PORTB口初始化  
  161.      DDRB  = 0xFF;       //1111 1111
  162.      PORTC = 0x00;          //PORTC口初始化
  163.      DDRC  = 0xFF;           //11111111  數(shù)碼管 置位輸出               
  164.      PORTD = 0x04;          // 0000 0100  PORTD口初始化   
  165.      DDRD  = 0xBA;           //1011 1010   //MK_TXD PD3=1/聲光報(bào)警 PD4=1
  166. }


  167. void timer0_init(void)  //定時(shí)器0
  168. {
  169.    TCCR0 = 0x00;
  170.    TCNT0 = 0x98;
  171.    TCCR0 = 0x02;
  172. }
  173. void init_devices(void)
  174. {

  175. CLI();
  176. port_init();
  177. timer0_init();

  178. MCUCR = 0x00;
  179. GICR  = 0x00;
  180. TIMSK = 0x01;
  181. SEI();
  182. }

  183. #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
  184. void timer0_ovf_isr(void)
  185. {
  186.   #asm("cli")      //關(guān)全局中斷
  187.   TCNT0=0x98;  
  188.   #asm("sei")   //開(kāi)全局中斷
  189.   flag_bps=1; // 波特率計(jì)時(shí)標(biāo)志位  
  190.    if(++counter_2ms>=20)  //每2ms刷新一次數(shù)碼管
  191.      {
  192.       LED_bit();
  193.        counter_2ms=0;
  194.        counter_20ms++;
  195.      }   
  196. }




  197. void main(void)
  198. {

  199. init_devices();

  200.    while(1);


  201. }
復(fù)制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:231449 發(fā)表于 2018-7-2 18:57 | 只看該作者
串口中斷打開(kāi)沒(méi),還有全局中斷
回復(fù)

使用道具 舉報(bào)

板凳
ID:363495 發(fā)表于 2018-7-2 20:40 | 只看該作者
串口的問(wèn)題吧
回復(fù)

使用道具 舉報(bào)

地板
ID:249033 發(fā)表于 2018-7-2 21:47 | 只看該作者
串口中斷打開(kāi)沒(méi),還有全局中斷
回復(fù)

使用道具 舉報(bào)

5#
ID:347760 發(fā)表于 2018-7-3 09:20 | 只看該作者
碼農(nóng)改變世界 發(fā)表于 2018-7-2 18:57
串口中斷打開(kāi)沒(méi),還有全局中斷

模擬串口還有串口中斷?
回復(fù)

使用道具 舉報(bào)

6#
ID:363818 發(fā)表于 2018-7-3 11:16 | 只看該作者
串口想要收到數(shù)據(jù)是要串口中斷的,其次看一下你的引腳有沒(méi)有串口的功能,再看一下是不是復(fù)用,又沒(méi)有選擇使用串口功能,tx,rx有沒(méi)有反接,常見(jiàn)問(wèn)題大概就這些,還有波特率,中斷的校驗(yàn),是不是校驗(yàn)不對(duì)
回復(fù)

使用道具 舉報(bào)

7#
ID:347760 發(fā)表于 2018-7-3 13:51 | 只看該作者
jikai555 發(fā)表于 2018-7-3 11:16
串口想要收到數(shù)據(jù)是要串口中斷的,其次看一下你的引腳有沒(méi)有串口的功能,再看一下是不是復(fù)用,又沒(méi)有選擇使 ...

哥,請(qǐng)了解下啥叫模擬串口謝謝
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕av第一页 | 亚洲一区二区视频 | 91视频进入 | 成年女人免费v片 | 欧美黄色网| 丝袜久久 | 国产视频久久 | 日日操夜夜摸 | 999免费视频 | 一二三四av | 国产精品小视频在线观看 | 久久久精品网站 | 99热这里有精品 | 免费同性女女aaa免费网站 | 天天综合网天天综合色 | 亚洲福利一区二区 | 欧美性受 | 国产精品久久久久久中文字 | 日韩欧美视频网站 | 在线一区视频 | www.夜夜草 | 久久1区 | 国产在线aa | 国产免费一区二区三区 | 欧美成人免费在线 | 日韩欧美中文字幕在线观看 | 欧美综合网 | 成人深夜福利在线观看 | 日日操av | 日韩免费在线 | 免费观看一级视频 | 亚洲欧美激情视频 | 国产小视频在线 | 91精品国产91久久久久久吃药 | 日韩激情在线 | 久久久一区二区三区四区 | 色站综合 | 亚洲男人天堂2024 | 人妖av| 黄色网络在线观看 | 久久精品免费 |