Chào các bạn. Mình có một đoạn Code viết bằng C đơn giản là nhận một kí tự từ bàn phím và sau đó phát lại cho PC (thông qua cổng Com). Chương trình của mình chạy tốt, nhưng khi mình thử nhúng một đoạn Code Assembler vào thì chương trình lại không chạy được. Mong các bạn chỉ giáo. Thanks nhiều nhé. Chương trình của mình như sau:
#include <at89x52.h>
void serial_int (void) interrupt 4 using 1
{
static char chr = '\0'; /* character buffer */
if (RI == 1) /* it was a receive interrupt */
{
chr = SBUF; /* read the character into our local buffer */
RI = 0; /* clear the received interrupt flag */
TI = 1; /* signal that there's a new character to send */
}
else if (TI == 1) /* otherwise, assume it was a transmit interrupt */
{
TI = 0; /* clear the transmit interrupt flag */
if (chr != '\0') /* if there's something in the local buffer... */
{
if (chr == '\r') chr = '\n'; /* convert to */
SBUF = chr; /* put the character into the transmit buffer */
chr = '\0';
}
}
}
main()
{
SCON = 0x50; /* mode 1, 8-bit uart, enable receiver */
TMOD = 0x20; /* timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; /* reload value for 9600 baud */
ET0 = 0; /* we don't want this timer to make interrupts */
TR1 = 1; /* start the timer */
TI = 1; /* clear the buffer */
ES = 1; /* allow serial interrupts */
EA = 1; /* enable interrupts */
/* initialize Port 0 to 0 */
P0 = 0;
while (1==1)
{
unsigned int i;
for (i = 0; i < 60000; i++) {;} /* delay */
//P0 = P0 + 1; /* increment Port 0 */
#pragma asm
inc P0
#pragma endasm
}
}
Khi mình nhúng vào 3 dòng:
#pragma asm
inc P0
#pragma endasm
thì chương trình không thể chạy được. Mình không hiểu tại sao???
(Mình đã đánh dấu check vào "Generate Assembler SRC File" và "Assemble SRC File" rồi). Các bạn có thể giúp mình được không? Thanks!
#include <at89x52.h>
void serial_int (void) interrupt 4 using 1
{
static char chr = '\0'; /* character buffer */
if (RI == 1) /* it was a receive interrupt */
{
chr = SBUF; /* read the character into our local buffer */
RI = 0; /* clear the received interrupt flag */
TI = 1; /* signal that there's a new character to send */
}
else if (TI == 1) /* otherwise, assume it was a transmit interrupt */
{
TI = 0; /* clear the transmit interrupt flag */
if (chr != '\0') /* if there's something in the local buffer... */
{
if (chr == '\r') chr = '\n'; /* convert to */
SBUF = chr; /* put the character into the transmit buffer */
chr = '\0';
}
}
}
main()
{
SCON = 0x50; /* mode 1, 8-bit uart, enable receiver */
TMOD = 0x20; /* timer 1, mode 2, 8-bit reload */
TH1 = 0xFD; /* reload value for 9600 baud */
ET0 = 0; /* we don't want this timer to make interrupts */
TR1 = 1; /* start the timer */
TI = 1; /* clear the buffer */
ES = 1; /* allow serial interrupts */
EA = 1; /* enable interrupts */
/* initialize Port 0 to 0 */
P0 = 0;
while (1==1)
{
unsigned int i;
for (i = 0; i < 60000; i++) {;} /* delay */
//P0 = P0 + 1; /* increment Port 0 */
#pragma asm
inc P0
#pragma endasm
}
}
Khi mình nhúng vào 3 dòng:
#pragma asm
inc P0
#pragma endasm
thì chương trình không thể chạy được. Mình không hiểu tại sao???
(Mình đã đánh dấu check vào "Generate Assembler SRC File" và "Assemble SRC File" rồi). Các bạn có thể giúp mình được không? Thanks!
Comment