1. PTIT
Giảng viên hướng dẫn: Phạm Thế Duy
Sinh viên thực hiện: Đinh Tuấn Hải
Đ09VTA1
409160010
Báo cáo Kỹ thuật Vi xử lý
2. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 1
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
CƠ SỞ TẠI THÀNH PHỐ HỒ CHÍ MINH
BÁO CÁO
MÔN KỸ THUẬT VI XỬ LÝ
TPHCM - 2011
GIẢNG VIÊN HƯỚNGDẪN: Phạm Thế Duy
SINH VIÊN THỰC HIỆN: Đinh Tuấn Hải
Lớp Đ09VTA1
MSSV: 409160010
3. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 2
Lưu ý:
+ Các mạch mô phỏng được thực hiện trên Proteus 7.8 SP2 và CodeVision 2.05.0
Professional với các điều kiện được ghi chú sẵn.
+ Các ghi chú trong code chỉ được ghi 1 lần, theo thứ tự xuất hiện của dòng lệnh. (Có
những code thừa nhưng do xuất hiện trước nên vẫn được ghi chú bình thường)
+ Các bài tập có sử dụng bộ định thời để chạy với ý nghĩa thời gian thực có thể hoạt
động sai khi sử dụng trên các máy tính khác, và phải hiệu chỉnh lại cho thích hợp. Các bài tập
này mang ý nghĩa thuật toán, giải thuật nhiều hơn ý nghĩa chính xác về mặt thời gian. Tất cả
các bài đã được hiệu chỉnh để chạy chính xác trên hệ thống máy tính của cá nhân người lập
trình, do vậy có thể mang tính chủ quan.
TP.HCM ngày 10 tháng 10 năm 2011
Sinh viên thực hiện
Đinh Tuấn Hải
4. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 3
MỤC LỤC
B I 1 ĐIỀU HI N C NG T C ĐƠN V ED ĐƠN......................................................................4
B I 2 HI N TH T ÊN ED 7 Đ ẠN............................................................................................17
B I 3 ĐIỀU HI N ĐỌC B N HÍ A T N HI N TH HÍ T ÊN ED 7 Đ ẠN........27
B I 4 ĐIỀU HI N HI N TH T ÊN CD....................................................................................38
B I 5 ĐIỀU HI N ĐỌC ĐIỆN DC B NG ADC V HI N TH ÊN CD ..............................51
B I 6 Đ NHIỆT Đ V HI N TH T ÊN ED 7 Đ ẠN D NG ẠCH S S NH TƯƠNGTỰ
TÍCH H T NG AV .................................................................................................................67
BÀI 7: TẠ UNG VU NG SIN TA GI C B NG DAC............................................................83
BÀI 8: GIAO TIẾP NỐI TIẾP USART..............................................................................................96
BÀI 9: THỰC HIỆN ĐỒNG HỒ ĐIỆN TỬ ..................................................................................... 115
B I 10 ĐÈN TÍN HIỆU GIAO THÔNG......................................................................................... 136
6. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 5
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
// Declare your global variables here
int i,j; //khai báo biến
unsigned char phu, phu2;
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTA=0x00;
DDRA=0xFF; //Port A là OUT
// Port B initialization
7. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 6
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00; //Port B là IN
// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00; //Port C là IN
// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00; //Port D là IN
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
8. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 7
// OC0 output: Disconnected
TCCR0=0x00; //Các thanh ghi cho Timer/Counter0
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00; //Các thanh ghi cho Timer/Counter1
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
9. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 8
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00; //thanh ghi cho Timer/Counter2
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off //ngắt ngoài
// INT1: Off
// INT2: Off
10. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 9
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00; //Cài đặt ngắt cho các bộ Timer/Counter
// USART initialization
// USART disabled
UCSRB=0x00; //Chức năng USART
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80; //Bộ so sánh tương tự - Analog Comparator
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
11. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 10
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
switch(PINB)
{
case 0b00000001: //Cau 1: 1 LED sang doi qua lai
{
PORTA = 0b10000000;
delay_ms(20); //tạo độ trễ để mắt người có thể theo dõi kịp
for (i=0; i<=6; i++) //chay LED qua phai 7 lan
{
PORTA = PORTA >> 1; //Port A dịch qua phải 1 bit
delay_ms(20);
}
12. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 11
for (i=6; i>=1; i--) //chay LED qua trai 7 lan
{
PORTA = PORTA << 1;
delay_ms(20);
}
break;
};
case 0b00000010: //Cau 2: 8 LED sang dan sau do tat dan
{
PORTA = 0b00000000;
phu = 0b10000000;
for (i=0; i<=7; i++) //sang dan tu trai qua phai
{
PORTA = phu;
phu = phu | (phu >> 1);
delay_ms(20);
}
for (i=0; i<=7; i++) //tat dan
{
PORTA = PORTA >> 1;
13. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 12
delay_ms(20);
}
break;
};
case 0b00000100: //Cau 3: 8 LED sang tu hai ben vao roi tat tu hai ben vao
{
phu = 0b10000000;
phu2 = 0b00000001;
PORTA = 0b00000000;
for (i=1; i<=4; i++) //sang tu hai ben vao
{
PORTA = phu + phu2 + PORTA;
phu = phu >> 1;
phu2 = phu2 <<1;
delay_ms(20);
};
phu = 0b10000000;
phu2 = 0b00000001;
for (i=1; i<=4; i++) //tat tu hai ben vao
{
PORTA = PORTA - phu - phu2 ;
14. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 13
phu = phu >> 1;
phu2 = phu2 <<1;
delay_ms(20);
}
break;
}
case 0b00001000: //Cau 4: 1 LED sang chay tu trai qua phai roi dung lai
{
phu2 = 0b00000000;
for (i=7; i>=0; i--)
{
phu = 0b10000000;
for (j=0; j<=i; j++)
{
PORTA = phu + phu2;
delay_ms(20);
phu = phu >> 1;
}
phu2 = PORTA;
15. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 14
}
delay_ms(20);
break;
}
case 0b00010000: //Cau 5: 8 LED chop tat
{
PORTA = 0b11111111;
delay_ms(20);
PORTA = 0b00000000;
delay_ms(20);
break;
};
case 0b00100000: //Cau 6: Cac LED sang tat xen ke va nguoc lai
{
PORTA = 0b10101010;
delay_ms(20);
PORTA = 0b01010101;
delay_ms(20);
break;
};
case 0b01000000: //Cau 7: 4 LED sang 4 LED tat va nguoc lai
16. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 15
{
PORTA = 0b11110000;
delay_ms(20);
PORTA = 0b00001111;
delay_ms(20);
break;
};
case 0b10000000: //Cau 8: 2 LED sang chay vao tu hai ben va chay ra hai ben
{
phu = 0b10000000;
phu2 = 0b00000001;
for (i=0; i<=7; i++)
{
PORTA = phu + phu2;
delay_ms(20);
phu = phu >> 1; //phu cho led chay qua phai, phu2 cho led chay
qua trai
phu2 = phu2 << 1;
}
break;
}
17. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 16
}
};
}
Ghi chú: Bật lần lượt các công tắc từ 1 tới 8 trong file mô phỏng để thực hiện lần lượt 8 yêu cầu
của đề bài.
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U1
ATMEGA16
D1
LED-YELLOW
D2
LED-YELLOW
D3
LED-YELLOW
D4
LED-YELLOW
D5
LED-YELLOW
D6
LED-YELLOW
D7
LED-YELLOW
D8
LED-YELLOW
0
SW1
SW-SPDT
SW2
SW-SPDT
SW3
SW-SPDT
SW4
SW-SPDT
SW5
SW-SPDT
SW6
SW-SPDT
SW7
SW-SPDT
SW8
SW-SPDT
19. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 18
Company :
Comments: Dinh Tuan Hai - D09VTA1
Chip type : ATmega16
Program type : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
// Declare your global variables here
unsigned char led[10] =
{0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,0b10111110,0b
11100000,0b11111110,0b11110110,}; // dinh nghia cac chu so tren LED
unsigned char pos[5] = {0b00000111,0b00001011,0b00001101,0b00001110,0b00001111};
//dinh nghia vi tri chon LED tren bang LED (position)
unsigned char dis[4] = {0,0,0,0}; //dinh nghia so de hien thi tren LED (display)
20. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 19
int i,j,k;
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
21. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 20
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
22. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 21
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
23. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 22
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
24. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 23
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
25. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 24
{
// Place your code here
switch(PINB)
{
case 0b00000001: // nhan SW1 de hien 4 so lien tuc
{
for (i=0;i<=3;i++)
{
PORTD = pos[i]; //hien thi so o vi tri i
PORTC = led[i+1]; //dịch
delay_ms(2);
PORTD = pos[4];
}
break;
}
case 0b00000010: // nhan SW2 de chay 0-9
{
for (i=0; i<=9; i++)
{
dis[3] = led[i];
for (k=0; k<=5; k++) //giam toc do chay so lai
26. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 25
{
for (j=3; j>=0; j--)
{
PORTD = pos[j];
PORTC = dis[j];
delay_ms(2);
PORTD = pos[4];
}
}
for (j=0; j<=3; j++)
dis[j] = dis[j+1];
}
break;
}
}
27. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 26
}
}
Ghi chú:
+ Nhấn SW1 để thực hiện yêu cầu 1 (hiện 4 số cùng lúc trên bảng LED)
+ Nhấn SW2 để thực hiện yêu cầu 2 (chạy số từ 0-9 từ phải qua trái)
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U1
ATMEGA16
SW1
SW-SPDT
SW2
SW-SPDT
29. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 28
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
// Declare your global variables here
int i,dem,row,col,n,j,k;
//dinh nghia cac ky tu se hien tren LED
unsigned char led[16] =
{0b11111100,0b01100000,0b11011010,0b11110010,0b01100110,0b10110110,0b10111110,0b
11100000,0b11111110,0b11110110, 0b11101110, 0b00111110, 0b10011100, 0b01111010,
0b10011110, 0b10001110};
//dinh nghia cac vi tri cua LED, pos[4] la khong chon vi tri nao(xoa)
unsigned char pos[5] = {0b00000111,0b00001011,0b00001101,0b00001110,0b00001111};
unsigned char dis[4] = {0,0,0,0};
int TIMVITRI(unsigned char p) //chuong trinh tim vi tri bit 0 trong p
{
dem = 10;
n=0;
while (p != 0b11111111) //thuc hien cho den khi p = 0xFF
{
30. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 29
p = (p >> 1);
p = p | 0b10000000;
n = n + 1;
}
dem = n - 1;
return(dem); //tra lai gia tri dem
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=Out Func1=Out Func0=Out
// State7=P State6=P State5=P State4=P State3=1 State2=1 State1=1 State0=1
PORTA=0xFF;
DDRA=0x00; //Cong A nhan tin hieu vao
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
31. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 30
PORTB=0xFF;
DDRB=0xFF; //Cong B dua tin hieu ra
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF; //Cong C dua tin hieu ra
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0x0F; //4 bit cao: IN, 4 bit thap: OUT
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
32. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 31
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
33. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 32
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
34. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 33
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
35. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 34
// TWI initialization
// TWI disabled
TWCR=0x00;
while (1)
{
// Place your code here
while (PIND.4 == 0) //thuc hien yeu cau so 1
{
PORTB=0b11110111;
for (col = 3; col>=0; col--)
{
row=TIMVITRI(PINA);
if (row>=0)
{
i=col*4+row; //thuật toán tính giá trị nút bấm
dis[3] = led[i];
};
36. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 35
PORTB =(PORTB>>1)| 0b10000000;
};
PORTD = pos[3];
PORTC = dis[3];
delay_ms(1);
}
while (PIND.4 == 1) //thuc hien yeu cau so 2
{
PORTB=0b11110111;
for (col = 3; col>=0; col--)
{
row=TIMVITRI(PINA);
if (row>=0)
{
i=col*4+row;
for(j=0;j<=2;j++)
{
dis[j] = dis[j+1];
}
dis[3] = led[i];
37. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 36
};
PORTB =(PORTB>>1)| 0b10000000;
};
for(n=0;n<=6;n++)
{
for(k=0;k<=3;k++) //hien thi ra LED
{
PORTD = pos[k];
PORTC = dis[k];
delay_ms(1);
PORTD = pos[4];
}
}
}
}
}
38. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 37
Ghi chú:
+ Chuyển mức Logic cổng PIND.4 thành 0 để thực hiện yêu cầu số 1 của bài (đọc mã
phím hiển thị lên LED 7 đoạn)
+ Chuyển mức Logic cổng PIND.4 thành 1 để thực hiện yêu cầu số 2 của bài (nhấm phim,
hiện ký tự tương ứng trên LED kế tiếp những ký tự đã nhấn trước đó)
0 4 8 C
1 5 9 D
2 6 A E
3 7 B F
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U1
ATMEGA16
1
40. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 39
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#define RS PORTC.0
#define RW PORTC.1
#define E PORTC.2
#define data PORTD
void wait_LCD(void) //chương trình con nhằm đợi cho LCD sẵn sàng
{
unsigned char tam;
DDRD = 0x00;
RS = 0;
RW = 1;
do
{
41. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 40
E = 1;
delay_ms(100);
tam = PIND;
E = 0;
}
while ((tam && 0x80)!= 0x80);
DDRD = 0xFF;
}
void set(unsigned char set) //chương trình con cài đặt cho LCD
{
delay_us(210);
RS = 0;
RW = 0;
E = 0;
data = set;
E = 1;
E = 0;
}
void display(unsigned char out) //chương trình con hiển thị 1 mã ASCII cho LCD
42. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 41
{
delay_us(210);
RS = 1;
RW = 0;
E = 0;
data = out;
E = 1;
E = 0;
}
void clear_LCD(void) //chương trình con xóa LCD
{
delay_ms(1);
RS = 0;
RW = 0;
E = 0;
data = 0x01;
E = 1;
E = 0;
}
void pos(int x,int y) //chương trình con chọn vị trí trên LCD
43. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 42
{
int i;
delay_us(210);
if(x == 0)
set(0x02);
if(x == 1)
set(0xc0);
for(i=0;i<=y;i++)
set(0x14);
}
// Declare your global variables here
char line1[] = {" Dinh Tuan Hai"}; //chuỗi được hiển thị ở hàng 1
char line2[] = {" 409160010 "}; //chuỗi được hiển thị ở hàng 2
int i,j;
unsigned char x;
void main(void)
{
// Declare your local variables here
44. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 43
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
45. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 44
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0x07;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
46. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 45
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
47. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 46
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
48. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 47
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
set(0x38);
set(0x0c);
set(0x02);
while (1)
{
// Place your code here
while (PINC.3 == 1) //Thuc hien yeu cau so 1
49. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 48
{
for (i=0;i<=16;i++)
{
display(line1[i]); //hiển thị hàng chữ 1
}
set(0xc0);
for (i=0;i<=16;i++)
{
display(line2[i]); //hiển thị hàng chữ 2
}
}
while (PINC.3 == 0) //Thuc hien yeu cau so 2
{
for (j=14;j>=0;j--) //chay cho de khi nao ca chuoi duoc can le trai
{
pos(1,j);
for(i=0;i<=(14-j);i++)
{
display(line1[i]);
50. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 49
}
delay_ms(40);
clear_LCD(); //xóa LCD
}
for(j=1;j<=15;j++) //chay tiep cho den khi ca chuoi chay het
{
pos(1,0);
for(i=j;i<=16;i++)
display(line1[i]);
delay_ms(40);
clear_LCD();
}
}
}
}
51. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 50
Ghi chú:
+ Chỉnh mức Logic của cổng PINC.3 thành 0 để thực hiện yêu cầu số 1 (hiển thị 2 dòng
chữ trên LCD)
+ Chỉnh mức Logic của cổng PINC.3 thành 1 để thực hiện yêu cầu số 2 (hiển thị dòng chữ
trôi)
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD1
LM016L
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U1
ATMEGA16
0
53. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 52
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <stdio.h>
#define RS PORTC.0 //định nghĩa lại cái port trên LCD để dễ chỉnh sửa
#define RW PORTC.1
#define E PORTC.2
#define data PORTD
#define ADC_VREF_TYPE 0x20
// Read the 8 most significant bits
// of the AD conversion result
unsigned char read_adc(unsigned char adc_input) //chương trình con đọc ADC
{
54. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 53
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void wait_LCD(void)
{
unsigned char tam;
tam = 0x80;
DDRD = 0x00;
while ((tam && 0x80)==0x80)
{
RS = 0;
RW = 1;
E = 0;
tam = PIND;
55. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 54
E = 1;
E = 0;
}
DDRD = 0xFF;
}
void set(unsigned char set)
{
delay_us(210);
RS = 0;
RW = 0;
E = 0;
data = set;
E = 1;
E = 0;
}
void display(unsigned char out)
{
delay_us(210);
RS = 1;
RW = 0;
56. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 55
E = 0;
data = out;
E = 1;
E = 0;
}
void clear_LCD(void)
{
delay_us(210);
RS = 0;
RW = 0;
E = 0;
data = 0x01;
E = 1;
E = 0;
}
void pos(int x,int y)
{
int i;
if(x == 0)
set(0x02);
57. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 56
if(x == 1)
{
set(0xc0);
y = y-1; //sua lai ham nay de cho chinh xac vi tri cusor dong 2
}
for(i=0;i<=y;i++)
set(0x14);
}
void display_hexa(unsigned char in) //chuong trinh hien thi ma HEXA
{
unsigned char i,j;
i = in & 0x0f; //lấy 4 bit thấp
if ((0x00 <= i) && (i <= 0x09))
i = i + 0x30;
else i = i + 0x37;
j = in & 0xf0; //lấy 4 bit cao
j = j >> 4;
if ((0x00 <= j) && (j <= 0x09))
j = j + 0x30;
58. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 57
else j = j + 0x37;
pos(0,13);
display(j);
delay_ms(1);
display(i);
//data = j;
delay_ms(100);
clear_LCD();
}
// Declare your global variables here
int k;
unsigned char i,j,in,tam;
unsigned int value,bit_value;
float valuef;
unsigned char dis[6] = {0,0x2c,0,0,0,0};
void main(void)
{
// Declare your local variables here
59. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 58
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0b00000111;
// Port D initialization
61. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 60
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
62. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 61
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
63. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 62
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: ADC Stopped
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
set(0x38);
64. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 63
set(0x0c);
set(0x02);
while (1)
{
// Place your code here
while (PINC.3 == 0) // Thuc hien yeu cau so 1
{
in = read_adc(0); //đọc ADC vào
display_hexa(in); //hiển thị mã hexa lên LCD
}
for(k = 0; k<=7; k++)
{
in = read_adc(k);
// Chuong trinh doi tu so nhi phan ra thap phan
value = 0;
bit_value = 1;
65. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 64
for (i=0;i<=7;i++)
{
tam = in & 0x01;
bit_value = 1;
if(tam == 0x01)
{
for(j=1;j<=i;j++)
bit_value = 2* bit_value;
}
else bit_value = 0;
value = bit_value + value;
in = in >> 1;
}
//Quy doi gia tri de chuan bi hien thi ra LCD
valuef = value * 5;
valuef = (float)valuef / 255;
valuef = valuef * 10000;
value = (int)valuef;
66. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 65
//Nap cac gia tri do duoc vao cac vi tri hien thi
for(i=5;i>=2;i--)
{
dis[i] = value % 10 + 0x30;
value = value/10;
}
dis[0] = value % 10 + 0x30;
//Hien thi ra man hinh LCD
if (k==4)
pos(1,0);
for (i=0;i<=2; i++)
{
display(dis[i]);
}
display(0x20); //SpaceBar
}
delay_ms(150);
67. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 66
clear_LCD();
}
}
Ghi chú:
+ Chỉnh mức Logic trên PINC.3 là 0 để thực hiện yêu cầu số 1 (hiện mã HEXA tương ứng
điện áp đầu vào cổng PINA.0)
+ Chỉnh mức Logic trên PINC.3 là 1 để thực hiện yêu cầu số 2 (hiện 8 giá trị điện áp
tương ứng trên 8 cổng vào)
PB0/T0/XCK
1
PB1/T1
2
PB2/AIN0/INT2
3
PB3/AIN1/OC0
4
PB4/SS
5
PB5/MOSI
6
PB6/MISO
7
PB7/SCK
8
RESET
9
XTAL2
12
XTAL1
13
PD0/RXD
14
PD1/TXD
15
PD2/INT0
16
PD3/INT1
17
PD4/OC1B
18
PD5/OC1A
19
PD6/ICP1
20
PD7/OC2
21
PC0/SCL
22
PC1/SDA
23
PC2/TCK
24
PC3/TMS
25
PC4/TDO
26
PC5/TDI
27
PC6/TOSC1
28
PC7/TOSC2
29
PA7/ADC7
33
PA6/ADC6
34
PA5/ADC5
35
PA4/ADC4
36
PA3/ADC3
37
PA2/ADC2
38
PA1/ADC1
39
PA0/ADC0
40
AREF
32
AVCC
30
U1
ATMEGA16
100%
RV1
50k
100%
RV2
50k
100%
RV3
50k
0%
RV4
100
100%
RV5
50k
100%
RV6
50k
100%
RV7
50k
100%
RV8
50k
D7
14
D6
13
D5
12
D4
11
D3
10
D2
9
D1
8
D0
7
E
6
RW
5
RS
4
VSS
1
VDD
2
VEE
3
LCD2
LM016L
U1(AREF)
RV2(2)
0
1
69. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 68
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#include <delay.h>
#include <math.h>
#define RS PORTC.0
#define RW PORTC.1
#define E PORTC.2
#define data PORTD
long int i,j=0,x;
long int time,temp;
int k;
float v,tempf;
unsigned char timedisplay[5] = {0,46,0,0,0}; //chuoi hien thi thoi gian tu nap
unsigned char voltagedisplay[5] = {0,46,0,0,0}; //chuoi hien thi dien ap tren tu
unsigned char tdisplay[4] = {0,0,0,0}; //chuoi hien thi nhiet do
char start[] = {" Starting..."}; //Chuoi hien thi khi LCD khoi dong
70. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 69
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
}
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void timer0_comp_isr(void)
{
// Place your code here
i++; //tang i len sau moi lan ngat
}
// Analog Comparator interrupt service routine
interrupt [ANA_COMP] void ana_comp_isr(void)
{
// Place your code here
time = i*10; //thoi gian tinh bang ms.
}
71. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 70
// Declare your global variables here
void wait_LCD(void)
{
unsigned char tam;
tam = 0x80;
DDRD = 0x00;
while ((tam && 0x80)==0x80)
{
RS = 0;
RW = 1;
E = 0;
tam = PIND;
E = 1;
E = 0;
}
DDRD = 0xFF;
}
void set(unsigned char set)
{
72. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 71
delay_us(210);
RS = 0;
RW = 0;
E = 0;
data = set;
E = 1;
E = 0;
}
void display(unsigned char out)
{
delay_us(210);
RS = 1;
RW = 0;
E = 0;
data = out;
E = 1;
E = 0;
}
void clear_LCD(void)
{
73. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 72
RS = 0;
RW = 0;
E = 0;
data = 0x01;
E = 1;
E = 0;
}
void pos(int x,int y)
{
int i;
if(x == 0)
set(0x02);
if(x == 1)
set(0xc0);
for(i=0;i<=y;i++)
set(0x14);
}
void time_display(long int time) //hien thi thoi gian
{
clear_LCD();
74. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 73
temp = time;
timedisplay[4] = temp % 10 + 48;
temp = temp / 10;
timedisplay[3] = temp % 10 + 48;
temp = temp / 10;
timedisplay[2] = temp % 10 + 48;
temp = temp / 10;
timedisplay[0] = temp + 48;
for(k=0;k<=4;k++)
display(timedisplay[k]);
display(115);
//time = 0;
//delay_ms(300);
}
void voltage_display(long int time) //hien thi dien ap
{
pos(0,9);
tempf = (float)time / 1000;
v = 5*(1-exp((-tempf)/10));
v = v * 1000;
v = (int)v;
76. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 75
}
for(k=0;k<=2;k++)
{
display(tdisplay[k]+48);
}
display(111);
display(67);
}
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0xFF;
Tải bản FULL (165 trang): bit.ly/2Ywib4t
77. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 76
// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTD=0x00;
DDRD=0xFF;
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
78. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 77
// Mode: CTC top=OCR0
// OC0 output: Disconnected
TCCR0=0x0B; //CTC mode
TCNT0=0x00; //khoi tao gia tri 0
OCR0=0x9B; //dem len 125 nhip
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
79. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 78
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
Tải bản FULL (165 trang): bit.ly/2Ywib4t
80. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 79
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// USART initialization
// USART disabled
UCSRB=0x00;
// Analog Comparator initialization
// Analog Comparator: On
// Interrupt on Falling Output Edge
// Analog Comparator Input Capture by Timer/Counter 1: On
ACSR=0x08;
SFIOR=0x00;
// ADC initialization
// ADC disabled
ADCSRA=0x00;
81. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 80
// SPI initialization
// SPI disabled
SPCR=0x00;
// TWI initialization
// TWI disabled
TWCR=0x00;
// Global enable interrupts
#asm("sei")
set(0x38);
set(0x0c);
set(0x02);
PORTA.0 = 1;
delay_ms(50); //xa tu
for(k=0;k<=16;k++)
display(start[k]); //hien dong chu khoi dong
while (1)
82. PTIT [BÁO CÁO KỸ THUẬT VI XỬ LÝ]
2011 Trang 81
{
// Place your code here
PORTA.0 = 0;
TIMSK = 0x02;
TCNT0 = 0x00;
i=0;
x = 1;
time = 0;
while(x==1) //lap vo han cho den khi tu nap bang LM35
{
if(time!=0)
x = 0;
}
pos(0,2);
time_display(time); //lan luot hien thi cac gia tri ra man hinh LCD
voltage_display(time);
temperature_display(v);
PORTA.0 = 1; //xa tu chuan bi cho lan do tiep theo
delay_ms(50);
}