| ??? 02/11/20 21:10 Read: times | #190967 - Keil C51 Bug | 
| I think I found a bug in the pre-processor for C51 v9.52.  I'm using uVision V4.72.9.0
 In testing some baud rates I found that the table values calculated by the pre-processor are wrong in one instance. All of the baud rate generator values are correct except for 19600. 
#define  SYS_CLK   12000000L           // Tcyc = 1/12MHz = 83ns
/*
| Baud rate to UART 1 baud rate generator reload conversion. 
|
|                       SYSCLK
| Reload = 65536 - ------------------  
|                  PRE * 2 * baudrate
|
| Assume SYSCLK is 12MHz and Baud Rate Prescaler Select == 11 (/1).
*/
#define  NUM_BAUDRATES  9
static U16 code BaudParams[NUM_BAUDRATES] =
   {
   65536 - (SYS_CLK/(1*2*1200)),       // 0xEC78 (exact)
   65536 - (SYS_CLK/(1*2*2400)),       // 0xF63C (exact)
   65536 - (SYS_CLK/(1*2*4800)),       // 0xFB1E (exact)
   65536 - (SYS_CLK/(1*2*9600)),       // 0xFD8F (exact)
   65536 - (SYS_CLK/(1*2*19200)),      // 0xFEC7 (0.16%) // COMPILER BUG? Gives 0x01BA. :(
   65536 - (SYS_CLK/(1*2*38400)),      // 0xFF64 (0.16%)
   65536 - (SYS_CLK/(1*2*57600)),      // 0xFF98 (0.16%)
   65536 - (SYS_CLK/(1*2*115200)),     // 0xFFCC (0.16%)
   65536 - (SYS_CLK/(1*2*31250))       // 0xFF40 (exact)
   };
#if(65536 - (SYS_CLK/(1*2*19200)) != 0xFEC7)
   #warning "Compiler preprocessor BUG at UART1 Baud rate 19200!"
#endif
 If anyone wants to double check this and other versions, that would be great. Also not sure if it's worth trying to find the Keil/Arm forum wherever it's gotten to... | 
| Topic | Author | Date | 
| Keil C51 Bug | 01/01/70 00:00 | |
| integer overflow | 01/01/70 00:00 | |
| Same result (bad) | 01/01/70 00:00 | |
| Spreadsheet Analysis | 01/01/70 00:00 | |
| please try again | 01/01/70 00:00 | |
| Yay   | 01/01/70 00:00 | 



