Mình muốn dùng tên gợi nhớ thay cho phải dùng tên các pin hay các port trong atmega8
Sẽ không thấy báo lỗi nếu
- mình không khai báo thêm phần ngắt truyền nhân nối tiếp
- hoặc là nếu mình khai báo truyền nhận nối tiếp thì phần khai báo biến hay định nghĩa pin cho các chương trình khác phải đặt phía dưới chương trình ngắt truyền nhận nối tiếp ?
mà lỗi toàn báo kiểu " missing " ; "
trong khi mình kiểm tra kô thấy thiếu mấy cái dấu đó ?
ví dụ về trường hợp mình khai báo một số định nghĩa và biến ở phía trên của ngắt truyền nhận nối tiếp và xảy ra thông báo lỗi như hình trên :
còn nếu mình bỏ phần khai báo biến hoặc định nghĩa pin để ở đằng sau thì không thấy lỗi ??
Sẽ không thấy báo lỗi nếu
- mình không khai báo thêm phần ngắt truyền nhân nối tiếp
- hoặc là nếu mình khai báo truyền nhận nối tiếp thì phần khai báo biến hay định nghĩa pin cho các chương trình khác phải đặt phía dưới chương trình ngắt truyền nhận nối tiếp ?
mà lỗi toàn báo kiểu " missing " ; "
trong khi mình kiểm tra kô thấy thiếu mấy cái dấu đó ?
ví dụ về trường hợp mình khai báo một số định nghĩa và biến ở phía trên của ngắt truyền nhận nối tiếp và xảy ra thông báo lỗi như hình trên :
Code:
#include <mega8.h> #define xtal 16000000 // dung thach anh 16 Mhz #include <delay.h> #include <math.h> #include <spi.h> #include<stdio.h> //================================ #define l_u PORTC.5 // LED DON HIEN THI #define l_i PORTC.4 #define on 0 #define off 1 #define l1 PORTD.5 // KICH TRANSISTOR #define l2 PORTD.6 #define l3 PORTD.7 #define l4 PORTB.0 #define l5 PORTB.1 #define clock PORTB.5 #define data PORTB.3 #define latch PORTB.2 #define s_a PORTC.2 // CHON KENH CHO IC PHAN KENH 4052 #define s_b PORTC.3 // //================================ //=========== ngat ngoai ===================== interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here } // External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { // Place your code here } //=========================== // ==========ngat timer========================= //========================================= interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here } // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Place your code here } // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { // Place your code here } //===================================== //================ ngat noi tiep ====================== #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) //================================== //=================================== // USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE<256 unsigned char rx_wr_index,rx_rd_index,rx_counter; #else unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif //====================================== bit rx_buffer_overflow; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; } #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index]; if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif // USART Transmitter buffer #define TX_BUFFER_SIZE 8 char tx_buffer[TX_BUFFER_SIZE]; #if TX_BUFFER_SIZE<256 unsigned char tx_wr_index,tx_rd_index,tx_counter; #else unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif // USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) { if (tx_counter) { --tx_counter; UDR=tx_buffer[tx_rd_index]; if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; }; } #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index]=c; if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; ++tx_counter; } else UDR=c; #asm("sei") } #pragma used- #endif
còn nếu mình bỏ phần khai báo biến hoặc định nghĩa pin để ở đằng sau thì không thấy lỗi ??
Code:
#include <mega8.h> #define xtal 16000000 // dung thach anh 16 Mhz #include <delay.h> #include <math.h> #include <spi.h> #include<stdio.h> //================ ====================== #define RXB8 1 #define TXB8 0 #define UPE 2 #define OVR 3 #define FE 4 #define UDRE 5 #define RXC 7 #define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<OVR) #define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC) //================================== //=================================== // USART Receiver buffer #define RX_BUFFER_SIZE 8 char rx_buffer[RX_BUFFER_SIZE]; #if RX_BUFFER_SIZE<256 unsigned char rx_wr_index,rx_rd_index,rx_counter; #else unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif //====================================== bit rx_buffer_overflow; // USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) { char status,data; status=UCSRA; data=UDR; if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { rx_buffer[rx_wr_index]=data; if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE) { rx_counter=0; rx_buffer_overflow=1; }; }; } #ifndef _DEBUG_TERMINAL_IO_ // Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data; while (rx_counter==0); data=rx_buffer[rx_rd_index]; if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0; #asm("cli") --rx_counter; #asm("sei") return data; } #pragma used- #endif // USART Transmitter buffer #define TX_BUFFER_SIZE 8 char tx_buffer[TX_BUFFER_SIZE]; #if TX_BUFFER_SIZE<256 unsigned char tx_wr_index,tx_rd_index,tx_counter; #else unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif // USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) { if (tx_counter) { --tx_counter; UDR=tx_buffer[tx_rd_index]; if (++tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; }; } #ifndef _DEBUG_TERMINAL_IO_ // Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_ #pragma used+ void putchar(char c) { while (tx_counter == TX_BUFFER_SIZE); #asm("cli") if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) { tx_buffer[tx_wr_index]=c; if (++tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; ++tx_counter; } else UDR=c; #asm("sei") } #pragma used- #endif //================================================ //sau đó mới khai báo mấy thứ trên ở dưới thì không lỗi ?? //================================ #define l_u PORTC.5 // LED DON HIEN THI #define l_i PORTC.4 #define on 0 #define off 1 #define l1 PORTD.5 // KICH TRANSISTOR #define l2 PORTD.6 #define l3 PORTD.7 #define l4 PORTB.0 #define l5 PORTB.1 #define clock PORTB.5 #define data PORTB.3 #define latch PORTB.2 #define s_a PORTC.2 // CHON KENH CHO IC PHAN KENH 4052 #define s_b PORTC.3 // //================================ //=========== ngat ngoai ===================== interrupt [EXT_INT0] void ext_int0_isr(void) { // Place your code here } // External Interrupt 1 service routine interrupt [EXT_INT1] void ext_int1_isr(void) { // Place your code here } //=========================== // ==========ngat timer========================= //========================================= interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here } // Timer 1 overflow interrupt service routine interrupt [TIM1_OVF] void timer1_ovf_isr(void) { // Place your code here } // Timer 2 overflow interrupt service routine interrupt [TIM2_OVF] void timer2_ovf_isr(void) { // Place your code here } //=====================================
Comment