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

📄 f34x_uart0_interrupt.lst

📁 8051f340实现cc1100软件SPI的正常数据收发
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   F34X_UART0_INTERRUPT                                                  02/03/2009 16:53:57 PAGE 4   

 179   1      
 180   1      }
 181          
 182          //-----------------------------------------------------------------------------
 183          // Initialization Subroutines
 184          //-----------------------------------------------------------------------------
 185          
 186          //-----------------------------------------------------------------------------
 187          // PORT_Init
 188          //-----------------------------------------------------------------------------
 189          //
 190          // Return Value : None
 191          // Parameters   : None
 192          //
 193          // Configure the Crossbar and GPIO ports.
 194          //
 195          // P0.4   digital   push-pull    UART TX
 196          // P0.5   digital   open-drain   UART RX
 197          //
 198          //-----------------------------------------------------------------------------
 199          
 200          void PORT_Init (void)
 201          {
 202   1         P0MDIN&=~0x09;
 203   1         P0MDOUT |= 0xd4;                    // Enable UTX as push-pull output
 204   1         XBR0     = 0x01;                    // Enable UART on P0.4(TX) and P0.5(RX)
 205   1         XBR1     = 0x40;                    // Enable crossbar and weak pull-ups
 206   1      }
 207          
 208          //-----------------------------------------------------------------------------
 209          // SYSCLK_Init
 210          //-----------------------------------------------------------------------------
 211          //
 212          // Return Value : None
 213          // Parameters   : None
 214          //
 215          // This routine initializes the system clock to use the internal oscillator
 216          // at its maximum frequency.
 217          // Also enables the Missing Clock Detector.
 218          //-----------------------------------------------------------------------------
 219          
 220          void SYSCLK_Init (void)
 221          {
 222   1         OSCICN |= 0x03;                     // Configure internal oscillator for
 223   1                                             // its maximum frequency
 224   1         RSTSRC  = 0x04;                     // Enable missing clock detector
 225   1      }
 226          
 227          //-----------------------------------------------------------------------------
 228          // UART0_Init
 229          //-----------------------------------------------------------------------------
 230          //
 231          // Return Value : None
 232          // Parameters   : None
 233          //
 234          // Configure the UART0 using Timer1, for <BAUDRATE> and 8-N-1.
 235          //-----------------------------------------------------------------------------
 236          
 237          void UART0_Init (void)
 238          {
 239   1         SCON0 = 0x10;                       // SCON0: 8-bit variable bit rate
 240   1                                             //        level of STOP bit is ignored
C51 COMPILER V7.06   F34X_UART0_INTERRUPT                                                  02/03/2009 16:53:57 PAGE 5   

 241   1                                             //        RX enabled
 242   1                                             //        ninth bits are zeros
 243   1                                             //        clear RI0 and TI0 bits
 244   1         if (SYSCLK/BAUDRATE/2/256 < 1) {
 245   2            TH1 = -(SYSCLK/BAUDRATE/2);
 246   2            CKCON &= ~0x0B;                  // T1M = 1; SCA1:0 = xx
 247   2            CKCON |=  0x08;
 248   2         } else if (SYSCLK/BAUDRATE/2/256 < 4) {
 249   2            TH1 = -(SYSCLK/BAUDRATE/2/4);
 250   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 01
 251   2            CKCON |=  0x01;
 252   2         } else if (SYSCLK/BAUDRATE/2/256 < 12) {
 253   2            TH1 = -(SYSCLK/BAUDRATE/2/12);
 254   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 00
 255   2         } else {
 256   2            TH1 = -(SYSCLK/BAUDRATE/2/48);
 257   2            CKCON &= ~0x0B;                  // T1M = 0; SCA1:0 = 10
 258   2            CKCON |=  0x02;
 259   2         }
 260   1      
 261   1         TL1 = TH1;                          // init Timer1
 262   1         TMOD &= ~0xf0;                      // TMOD: timer 1 in 8-bit autoreload
 263   1         TMOD |=  0x20;
 264   1         TR1 = 1;                            // START Timer1
 265   1         TX_Ready = 1;                       // Flag showing that UART can transmit
 266   1         IP |= 0x10;                         // Make UART high priority
 267   1         ES0 = 1;                            // Enable UART0 interrupts
 268   1      
 269   1      }
 270          
 271          //-----------------------------------------------------------------------------
 272          // Interrupt Service Routines
 273          //-----------------------------------------------------------------------------
 274          
 275          //-----------------------------------------------------------------------------
 276          // UART0_Interrupt
 277          //-----------------------------------------------------------------------------
 278          //
 279          // This routine is invoked whenever a character is entered or displayed on the
 280          // Hyperterminal.
 281          //
 282          //-----------------------------------------------------------------------------
 283          
 284          void UART0_Interrupt (void) interrupt 4
 285          {
 286   1         if (RI0 == 1)
 287   1         {
 288   2          //  if( UART_Buffer_Size == 0)  {      // If new word is entered
 289   2          //     UART_Input_First = 0;    }
 290   2      
 291   2            RI0 = 0;                           // Clear interrupt flag
 292   2      
 293   2            txBuffer[1] = SBUF0;                      // Read a character from UART
 294   2      
 295   2                 send_num++;                                   //发送数据个数累加
 296   2             TI_CC_SPIStrobe(TI_CCxxx0_SIDLE);             //进入IDLE模式
 297   2             txBuffer[0] =6;                              // Packet length
 298   2             if(txBuffer[1] == 0x02)
 299   2             txBuffer[1] = 0x01;                           // Packet address
 300   2             else if(txBuffer[1] == 0x01)
 301   2             txBuffer[1] = 0x02;                           // Packet address
 302   2             txBuffer[3] = send_num;                       //写入当前发送数据个数
C51 COMPILER V7.06   F34X_UART0_INTERRUPT                                                  02/03/2009 16:53:57 PAGE 6   

 303   2             RFSendPacket(txBuffer, 7);                   // 发送数据
 304   2          /*  if (UART_Buffer_Size < UART_BUFFERSIZE)
 305   2            {
 306   2               UART_Buffer[UART_Input_First] = Byte; // Store in array
 307   2      
 308   2               UART_Buffer_Size++;             // Update array's size
 309   2      
 310   2               UART_Input_First++;             // Update counter
 311   2            }*/
 312   2      
 313   2         }
 314   1      
 315   1         if (TI0 == 1)                   // Check if transmit flag is set
 316   1         {
 317   2            TI0 = 0;                           // Clear interrupt flag
 318   2      
 319   2          /*  if (UART_Buffer_Size != 1)         // If buffer not empty
 320   2            {
 321   2               // If a new word is being output
 322   2               if ( UART_Buffer_Size == UART_Input_First ) {
 323   2                    UART_Output_First = 0;  }
 324   2      
 325   2               // Store a character in the variable byte
 326   2               Byte = UART_Buffer[UART_Output_First];
 327   2      
 328   2               if ((Byte >= 0x61) && (Byte <= 0x7A)) { // If upper case letter
 329   2                  Byte -= 32; }
 330   2      
 331   2               SBUF0 = Byte;                   // Transmit to Hyperterminal
 332   2      
 333   2               UART_Output_First++;            // Update counter
 334   2      
 335   2               UART_Buffer_Size--;             // Decrease array size
 336   2      
 337   2            }
 338   2            else
 339   2            {
 340   2               UART_Buffer_Size = 0;            // Set the array size to 0
 341   2               TX_Ready = 1;                    // Indicate transmission complete
 342   2            }*/
 343   2         }
 344   1      }
 345          
 346          //-----------------------------------------------------------------------------
 347          // End Of File
 348          //-----------------------------------------------------------------------------


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    239    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     46    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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