??? 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 |