Em chào các pro, e là mem mới, mới học AVR
Em hiện đang tìm hiểu về UART dùng AVR và mô phỏng với Protus 7.8
Em học trên hocavr.com và viết theo chuơng trình đối với Atmega32 và mô phỏng thành công. Nhưng khi viết lại cùng chuơng trình này đối với Atmega644p và Atmega88p thì mô phỏng không được. Về program thì ko có vấn đề vì cùng 1 chuơng trình, chỉ là đổi các setting của USART, mà e tìm mãi ko ra tại sao khi dùng vs 644p và 88p thì mô phỏng ko được, chắc do setting trong protus đối với Atmega644p và 88p khác, các pro có thể chỉ giáo e được ko ah. Em cám ơn.
#include <avr/io.h>
#include <avr/delay.h>
#define FOSC 20000000//20MHz
#define BAUD 9600//9600bps
#define MYUBRR FOSC/16/BAUD-1
void uart_putchar(unsigned char c);
void uart_init(unsigned int ubrr){
UBRRH=(unsigned char)(ubrr>>8);
UBRRL=(unsigned char)ubrr;
UCSRA=(0<<U2X);
UCSRB=(1<<TXEN);
UCSRC=(3<<UCSZ0);
}
int main(void){
uart_init(MYUBRR);//USART setting
while(1){
for (char i=32;i<128;i++){
uart_putchar(i);
_delay_ms(100);
}
}
}
//chuong trinh con phat du lieu
void uart_putchar(unsigned char c){
while (bit_is_clear(UCSRA,UDRE)) {}; //cho den khi bit UDRE=1 moi thoat khoi while
UDR=c;
}
Em hiện đang tìm hiểu về UART dùng AVR và mô phỏng với Protus 7.8
Em học trên hocavr.com và viết theo chuơng trình đối với Atmega32 và mô phỏng thành công. Nhưng khi viết lại cùng chuơng trình này đối với Atmega644p và Atmega88p thì mô phỏng không được. Về program thì ko có vấn đề vì cùng 1 chuơng trình, chỉ là đổi các setting của USART, mà e tìm mãi ko ra tại sao khi dùng vs 644p và 88p thì mô phỏng ko được, chắc do setting trong protus đối với Atmega644p và 88p khác, các pro có thể chỉ giáo e được ko ah. Em cám ơn.
#include <avr/io.h>
#include <avr/delay.h>
#define FOSC 20000000//20MHz
#define BAUD 9600//9600bps
#define MYUBRR FOSC/16/BAUD-1
void uart_putchar(unsigned char c);
void uart_init(unsigned int ubrr){
UBRRH=(unsigned char)(ubrr>>8);
UBRRL=(unsigned char)ubrr;
UCSRA=(0<<U2X);
UCSRB=(1<<TXEN);
UCSRC=(3<<UCSZ0);
}
int main(void){
uart_init(MYUBRR);//USART setting
while(1){
for (char i=32;i<128;i++){
uart_putchar(i);
_delay_ms(100);
}
}
}
//chuong trinh con phat du lieu
void uart_putchar(unsigned char c){
while (bit_is_clear(UCSRA,UDRE)) {}; //cho den khi bit UDRE=1 moi thoat khoi while
UDR=c;
}