⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lesson9_c.lst

📁 8051串口收发。主机要使用IBM汇编。
💻 LST
📖 第 1 页 / 共 2 页
字号:
 180   3                                              g_uc_disp_cnt = 0;
 181   3                                      break;
 182   3                              case 11:/*B*/
 183   3                                              g_uc_min_cnt ++;
 184   3                                              g_ui_ram_addr ++;
 185   3                                              g_uc_sec_cnt = XBYTE[g_ui_ram_addr];
 186   3      
 187   3                                              display_led();
 188   3                                              break;
 189   3                              default:/*k = 0~9*/
 190   3      
 191   3                                              g_uc_disp_cnt++;
 192   3                                              switch(g_uc_disp_cnt)
 193   3                                              {
 194   4                                                      case 1:/*hr high*/
 195   4                                                                      g_uc_hr_cnt = k <<4;
 196   4                                                                      g_hr_disp = g_uc_hr_cnt;/*using OR can't mask the hr_low,so hr equal to 0*/
 197   4                                                              break;
 198   4                                                      case 2:/*hr low*/
 199   4                                                                      g_uc_hr_cnt += k;
 200   4                                                                      g_hr_disp = g_uc_hr_cnt;
 201   4                                                              break;
 202   4                                                      case 3:/*min high*/
 203   4                                                                      g_uc_min_cnt = k <<4;
 204   4                                                                      g_min_disp = g_uc_min_cnt;
 205   4                                                              break;
 206   4                                                      case 4:/*min low*/
 207   4                                                                      g_uc_min_cnt += k;
 208   4                                                                      g_min_disp = g_uc_min_cnt;
 209   4      
 210   4                                                                      g_ui_ram_addr = g_uc_hr_cnt;
 211   4                                                                      g_ui_ram_addr = g_ui_ram_addr << 8;
 212   4                                                                      g_ui_ram_addr += g_uc_min_cnt;
 213   4      
 214   4                                                                      g_sec_disp = XBYTE[g_ui_ram_addr];//display the content of thd addr
 215   4                                                              break;
 216   4                                                      default:
 217   4      
 218   4                                                              break;
 219   4                                              }
 220   3                                      break;
 221   3                      }
 222   2              }
 223   1              else/*not release the key; continue wait*/
 224   1              {
 225   2                      delay(2,255);
 226   2                      goto lab;
 227   2              }
 228   1      
 229   1      }
 230          /*************************************************/
 231          /*
 232          name:display_led
 233          function:display the number
 234          */
 235          /*************************************************/
 236          void display_led(void)
 237          {
 238   1              g_sec_disp = g_uc_sec_cnt;
 239   1              g_min_disp = g_uc_min_cnt;
 240   1              g_hr_disp = g_uc_hr_cnt;
C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 5   

 241   1      }
 242          /*************************************************/
 243          /*
 244          name:delay
 245          function:
 246          */
 247          /*************************************************/
 248          void delay(uchar m, uchar n)
 249          {
 250   1              unsigned char i, j;
 251   1              for(i=0;i<m;i++)
 252   1              {
 253   2                      for(j=0;j<n;j++);
 254   2              }
 255   1      }
 256          
 257          /*************************************************/
 258          /*time0_interrupt*/
 259          /*************************************************/
 260          /*void time0_interrupt(void) interrupt 1 using 3
 261          {
 262                  TH0 =0x3C   ;//重新装入初值15536
 263                  TL0 =0xB0   ;//100ms=0.1s
 264          
 265                  uc_ms_cnt++;
 266                  if(uc_ms_cnt==10)
 267                  {
 268                          uc_ms_cnt = 0;
 269                          uc_sec_cnt++;
 270                          if((uc_sec_cnt&0x0F)>9) //变量uc_sec_cnt为16进制数,显示应该为10进制
 271                          {
 272                                  uc_sec_cnt += 6;        //(uc_sec_cnt&0x0F)按位与运算
 273                          }                                               //若没有if语句,则只能是到9以后,继续数到F才进位
 274                          display_led();//显示时钟
 275          
 276          
 277                          if((uc_sec_cnt)>=0x60)
 278                          {
 279                                  uc_sec_cnt = 0;
 280                                  uc_min_cnt++;
 281                                  if((uc_min_cnt&0x0F)>9)         //变量uc_min_cnt为16进制数,显示应该为10进制
 282                                  {
 283                                          uc_min_cnt += 6;                //(uc_min_cnt&0x0F)按位与运算
 284                                  }                                                       //若没有if语句,则只能是到9以后,继续数到F才进位
 285                                  display_led();
 286          
 287                                  if((uc_sec_cnt)>=0x60)
 288                                  {
 289                                          uc_min_cnt = 0;
 290                                          uc_hr_cnt++;
 291          
 292                                          if((uc_hr_cnt&0x0F)>9)          //变量uc_hr_cnt为16进制数,显示应该为10进制
 293                                          {
 294                                                  uc_hr_cnt += 6;                 //(uc_hr_cnt&0x0F)按位与运算
 295                                          }                                                       //若没有if语句,则只能是到9以后,继续数到F才进位
 296          
 297                                          display_led();
 298          
 299                                          if((uc_hr_cnt)>=0x24)
 300                                          {
 301                                                  uc_hr_cnt = 0;
 302                                          }
C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 6   

 303                                  }
 304                          }
 305                  }
 306          }
 307          */
 308          
 309          /*************************************************/
 310          /*serial_interrupt*/
 311          /*************************************************/
 312          void serial_interrupt(void) interrupt 4 using 2
 313          {
 314   1              EA = 0;
 315   1              RI = 0;
 316   1      
 317   1              g_uc_sec_cnt = 0xAA;
 318   1              g_uc_min_cnt = 0x9A;
 319   1              g_uc_hr_cnt = 0x9F;
 320   1              display_led();
 321   1      
 322   1              g_uc_recv_serial_cnt ++;
 323   1      
 324   1              beep = 0;
 325   1              delay(30,55);
 326   1              beep = 1;
 327   1      
 328   1              if(g_uc_recv_serial_cnt < 11)
 329   1              {
 330   2                      ACC = SBUF;
 331   2                      XBYTE[g_ui_ram_addr] = ACC;
 332   2                      g_ui_ram_addr ++;
 333   2      
 334   2                      //delay(5,200);
 335   2                      //delay(5,10);
 336   2                      //delay(5,0);//添加了延时后,无法在PC上显示出字符
 337   2                      SBUF = ACC;//back to IBM, check the TI
 338   2              }
 339   1              else
 340   1              {
 341   2                      ACC = 0x2A;//ASCII 0x21:!
 342   2                      SBUF = ACC;
 343   2              }
 344   1      
 345   1              while(TI == 0)
 346   1              {
 347   2                      delay(3,255);
 348   2              }
 349   1              TI = 0;
 350   1      
 351   1              EA = 1;
 352   1      
 353   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    442    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      7       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.

C51 COMPILER V7.50   LESSON9_C                                                             06/15/2006 21:31:47 PAGE 7   


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -