Professional Documents
Culture Documents
Đây là bài đầu tiên của loạt bài về AVR. Sau khi kết thúc bài đầu tiên bạn dễ dàng
lập trinh input và output cho AVR.
Tóm tắt : Lập trình điều khiển led bật tắt ,sử dụng cách định nghĩa PIN và
PORT ,cách dùng thư viện delay.h của codevision.
Giới thiệu:
Cấu trúc chân của AVR có thể phân biệt rõ chức năng (vào ra) trạng thái (0 1) từ
đó ta có 4 kiểu vào ra cho một chân của avr.Khác với 89 là chỉ có 2 trạng thái duy
nhất (0 1) . Đặc biệt nguồn từ chân của AVR đủ khoẻ để điều khiển Led trực tiếp
(mA) còn 89 chỉ là vài uA .
Để điều khiển các chân này chúng ta có 2 thanh ghi
->PORTx :giá trị tại từng chân (0 – 1) có thể truy cập tới từng bit PORTx.n
->DDRx : thanh ghi chỉ trạng thái của từng chân , vào hoặc là ra .Giá trị 1 là ra và
0 là vào .
Ví dụ 1 : Nhấp nháy lần lượt đèn xanh và đèn đỏ , khi ấn nút bấm chỉ có đèn đỏ
sáng.
Phần cứng : đèn xanh PORTB.4 , đèn đỏ PORTB.5 , nút bấm PINB.7
Chú ý :
định nghĩa 1 chân là chân vào PIN x.x
#define nut_bam PINB.7
định nghĩa 1 chân là chân vào PORT x.x
#define den_do PORTB.5
1.
2. /*****************************************************
3. This program was produced by the
4. CodeWizardAVR V1.24.8d Professional
5. Automatic Program Generator
6. © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
7. http://www.hpinfotech.com
8.
9. Project :
10. Version :
11. Date : 12/27/2007
12. Author : LENGOCTUAN
13. Company : VAGAM
14. Comments:
15.
16.
17. Chip type : ATmega16
18. Program type : Application
19. Clock frequency : 8.000000 MHz
20. Memory model : Small
21. External SRAM size : 0
22. Data Stack size : 256
23. *****************************************************/
24.
25. #include <mega16.h>
26. #include <delay.h>
27.
28. // Declare your global variables here
29.
30. #define den_xanh PORTB.5
31. #define den_do PORTB.6
32. #define nut_bam PINB.7
33.
34. void main(void)
35. {
36.
37. // Port B initialization
38. // Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In
Func0=In
39. // State7=T State6=0 State5=0 State4=T State3=T State2=T State1=T
State0=T
40. PORTB=0x80;
41. DDRB=0x30;
42.
43.
44.
45. while (1)
46. {
47. // Place your code here
48. //khi nut bam chua duoc bam logic nut_bam=1
49. if(nut_bam)
50. {
51. den_xanh=1;den_do=0;
52. delay_ms(500);
53. den_xanh=0;den_do=1;
54. delay_ms(500);
55. }
56. //khi nut bam duoc an nut_bam=0 chi den do sang
57. else
58. {den_xanh=1;den_do=0;}
59. };
60. }
61.
62.
63.
Bài 2 - AVR – Timer
Đặc tính:
Introduction
f=fc/N*510
Trong đó N tạo ra bởi bộ chia nó có các giá trị là:1,8,64,256 hoặc 1024
Bít 3,6 –WG00-WG01: Đây là các bít chọn chế độ trong Timer.Các giá trị được mô tả trong bảng sau.
Bít 1-OCFx : Khi hai giá trị bằng nhau bít này được set lên bằng 1
Bít 1-TVOx : Khi bộ đếm vượt quá giá trị Top thì bít này được set bằng 1
Bít 1 – OCIEx: khi bít này được set lên bằng 1 thì cho phép ngắt so sánh
Bít 0 –TOIEX : Khi bít này được set lên bằng 1 thì cho phép ngắt tràn
đoạn chương trình trên dùng timer1. Timer này là bộ đếm 16bit nên giá trị đếm được tối đa là FFFF.
Trong phần khởi tạo Timer ta khởi tạo xung clock cho bộ đếm là 125Khz = 125000 có nghĩa là bộ
đếm sẽ đếm được 125000 giá trị trong 1 giây. Ta làm phép tính như sau:
1. #include <mega8.h>
2.
3. unsigned char count=0;
4.
5. interrupt [TIM1_OVF] void timer1_ovf_isr(void) //ngat xay ra sau
20ms
6. {
7. TCNT1H=0xF6; //giá trị nạp lại TCNT1L=0x3B;
8. // goi ham can xu li sau 20mscount++;
9. if (count>10)
10. {
11. count=0;
12. //goi ham can xu li sau 2s }
13. }
14.
15. void main(void)
16. {
17. // Timer/Counter 1 initialization
18. // Clock source: System Clock
19. // Clock value: 125.000 kHz
20. // Mode: Normal top=FFFFh
21. // OC1A output: Discon.
22. // OC1B output: Discon.
23. // Noise Canceler: Off
24. // Input Capture on Falling Edge
25. // Timer 1 Overflow Interrupt: On
26. // Input Capture Interrupt: Off
27. // Compare A Match Interrupt: Off
28. // Compare B Match Interrupt: OffTCCR1A=0x00;
29. TCCR1B=0x03;
30. TCNT1H=0xF6;
31. TCNT1L=0x3B;
32. ICR1H=0x00;
33. ICR1L=0x00;
34. OCR1AH=0x00;
35. OCR1AL=0x00;
36. OCR1BH=0x00;
37. OCR1BL=0x00;
38. #asm("sei") //bat co cho phep ngat toan cuc neu khong thi khong co
ngat xay ra
39. while (1)
40. {
41. ..........................
42. };
43. }
Bài 3 : Tạo cảnh báo sử dụng ngắt ngoài
Tóm tắt : Qua bài học này bạn sẽ biết được thế nào là ngắt ngoài .Cách sử dụng ngắt ngoài của AVR
Giới thiệu :
Sau đó 1 cờ ngắt sẽ dựng lên 1 và báo cho biết có ngắt , nhảy đến chương trình con thực hiện ngắt .
Ban đầu khởi tạo ta sẽ để đèn xanh bật đỏ tắt , PORTD.3 treo lên 5V , là port vào
PORTD=0x08;
DDRD=0x00;
Chọn ngắt INT1 chế độ Low level (khi nào chân PD3 có mức logic 0V là xảy ra ngắt )
GICR|=0x80;
MCUCR=0x00;
MCUCSR=0x00;
GIFR=0x80;
1.
2. /*****************************************************
3. This program was produced by the
4. CodeWizardAVR V1.24.8d Professional
5. Automatic Program Generator
6. © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
7. http://www.hpinfotech.com
8.
9. Project :
10. Version :
11. Date : 12/29/2007
12. Author : le ngoc tuan
13. Company : vagam
14. Comments:
15.
16.
17. Chip type : ATmega16
18. Program type : Application
19. Clock frequency : 8.000000 MHz
20. Memory model : Small
21. External SRAM size : 0
22. Data Stack size : 256
23. *****************************************************/
24.
25. #include <mega16.h>
26. #include <delay.h>
27.
28. // Declare your global variables here
29.
30. #define den_xanh PORTB.4
31. #define den_do PORTB.5
32.
33.
34.
35. // External Interrupt 1 service routine
36. interrupt [EXT_INT1] void ext_int1_isr(void)
37. {
38. // Place your code here
39. den_xanh=1;den_do=0;//bat den do ,tat den xanh
40. }
41.
42.
43.
44. void main(void)
45. {
46. // Declare your local variables here
47.
48. // Input/Output Ports initialization
49. // Port A initialization
50. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
51. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
52. PORTA=0x00;
53. DDRA=0x00;
54.
55. // Port B initialization
56. // Func7=In Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In
Func0=In
57. // State7=T State6=0 State5=0 State4=T State3=T State2=T State1=T
State0=T
58. PORTB=0x80;
59. DDRB=0x30;
60.
61. // Port C initialization
62. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
63. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
64. PORTC=0x00;
65. DDRC=0x00;
66.
67. // Port D initialization
68. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
69. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
70. PORTD=0x08;
71. DDRD=0x00;
72.
73.
74.
75. // External Interrupt(s) initialization
76. // INT0: Off
77. // INT1: On
78. // INT1 Mode: Low level
79. // INT2: Off
80. GICR|=0x80;
81. MCUCR=0x00;
82. MCUCSR=0x00;
83. GIFR=0x80;
84.
85.
86. // Global enable interrupts
87. #asm("sei")
88. while (1)
89. {
90. den_xanh=0;den_do=1;
91. };
92. }
93.
Bài 4 : Lập trình hiển thị LCD (Chữ chạy)
Tóm tắt : Qua bài viết này bạn sẽ sử dụng thành thạo thư viện lcd.h của codevision .Sử dụng linh
hoạt , tạo ra dòng chữ chạy trên lcd .
Giới thiệu :
Phần cứng : bạn nối lcd như sơ đồ dưới đây
LCD giao tiếp theo chuẩn logic TTL thông thường (5V cho logic 1 và 0V cho logic 0) cho nên có thể
kết nối trực tiếp với VĐK
+ Chân dữ liệu (những chân dùng để "ra lệnh") của LCD từ chân 7 đến chân 14 (được nhà sản xuất đặt
tên là DB0-DB7)
+ Chân tín hiệu là các chân 4(RS), 5(RW), 6(E)
Giả sử bạn lập trình với port C
PortC0 - RS
PortC1 - RD
PortC2 - EN
PortC4 - D4
PortC5 - D5
PortC6 - D6
PortC7 - D7
port có thể thay đổi(PORT A,B hay C) nhưng các thứ tự chân phải đúng như trên .(do cách lập trình
trong thư viện lcd.h) Nếu bạn lập trình bộ thư viện riêng , cách chân phần cứng có thể bố trí thoải mái
theo ý người lập trình.
Hai nữa khi lập trình LCD các bạn chú ý ở chân VEE (chân số 3 lcd) phải có mức điện áp gần bằng
0V, thường các mạch có 1 con điện trở để chỉnh cường độ sáng tối cho LCD.Để đơn giản bạn có thể
nối chân đó với GND(0V) lcd sẽ luôn hiển thị rõ tối đa .
Để tìm hiểu thêm về LCD bạn có thể tham khảo bài viết của trietnguyen : Giới thiệu về LCD
(http://www.vagam.dieukhien.net/attachment.php?attid=32&d=1179760345)
Khi sử dụng codevision bạn sẽ có một bộ thư viện viết sắn bao gồm các hàm cơ bản sau đây :
void lcd_clear(void)
Xóa hết màn hình
void lcd_gotoxy(unsigned char x, unsigned char y)
Nhảy tới vị trí x và dòng thứ y (0 là dòng 1 và 1 là dòng thứ 2 với lcd 2 dòng )
void lcd_putchar(char c)
Hiển thị 1 kí tự
void Lcd_puts(char *str)
Hiển thị 1 chuỗi kí tự trên RAM
void lcd_putsf(char flash *str)
Hiển thị 1 chuỗi kí tự trên FLASH(thường dùng lệnh này để tiết kiệm ram
1. /*****************************************************
2. This program was produced by the
3. CodeWizardAVR V1.24.8d Professional
4. Automatic Program Generator
5. © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
6. http://www.hpinfotech.com
7.
8. Project :
9. Version :
10. Date : 1/1/2008
11. Author : LENGOCTUAN
12. Company : VAGAM
13. Comments:
14.
15.
16. Chip type : ATmega16
17. Program type : Application
18. Clock frequency : 8.000000 MHz
19. Memory model : Small
20. External SRAM size : 0
21. Data Stack size : 256
22. *****************************************************/
23.
24. #include <mega16.h>
25. #include <delay.h>
26. // Alphanumeric LCD Module functions
27. #asm
28. .equ __lcd_port=0x15 ;PORTC
29. #endasm
30. #include <lcd.h>
31.
32. // Declare your global variables here
33. unsigned char i; //bien dem de chay chu
34. char flash *str="<- "; //chuoi ki tu viet tren Flash
35.
36. void main(void)
37. {
38.
39. // LCD module initialization
40. lcd_init(16);//khoi tao lcd 16 cot 2 dong
41. i=16;
42. while (1)
43. {
44. // Place your code here
45. i--;
46. lcd_gotoxy(i,1);
47. lcd_putsf(str);
48.
49. if(i==0) {i=16; lcd_gotoxy(0,1);lcd_putsf(" ");}
50. lcd_gotoxy(0,0);
51. lcd_putsf("Happy new year ");
52. delay_ms(500);
53.
54. };
55. }
56.
57.
Bài 5 : Dùng ADC nhận tín hiệu từ biến trở
Tóm tắt : Qua bài này các bạn có thể sử dụng được ADC của AVR
Giới thiệu :
Phần cứng các bạn cần 1 con biến trở nối vào portA.0
Mạch ATmega16 như bài đầu .
Ví dụ : Dùng PORTA.0 nhận giá trị từ biến trở hiển thị lên LCD theo ADC 8bit (từ 0->5V thành 0 -
>255)
Chú ý : trong chương trình có sử dụng hàm lcd_putnum(value); hiển thị chữ số
1. /*****************************************************
2. This program was produced by the
3. CodeWizardAVR V1.24.8d Professional
4. Automatic Program Generator
5. © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
6. http://www.hpinfotech.com
7.
8. Project :
9. Version :
10. Date : 1/9/2008
11. Author : LENGOCTUAN
12. Company : VAGAM
13. Comments:
14.
15. Comments:
16.
17.
18.
19. Chip type : ATmega16
20. Program type : Application
21. Clock frequency : 8.000000 MHz
22. Memory model : Small
23. External SRAM size : 0
24. Data Stack size : 256
25. *****************************************************/
26.
27. #include <mega16.h>
28.
29. // Alphanumeric LCD Module functions
30. #asm
31. .equ __lcd_port=0x15 ;PORTC
32. #endasm
33. #include <lcd.h>
34.
35. #define FIRST_ADC_INPUT 0
36. #define LAST_ADC_INPUT 7
37. unsigned char adc_data[LAST_ADC_INPUT-FIRST_ADC_INPUT+1];
38. #define ADC_VREF_TYPE 0x20
39.
40. // ADC interrupt service routine
41. // with auto input scanning
42. interrupt [ADC_INT] void adc_isr(void)
43. {
44. register static unsigned char input_index=0;
45. // Read the 8 most significant bits
46. // of the AD conversion result
47. adc_data[input_index]=ADCH;
48. // Select next ADC input
49. if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT))
50. input_index=0;
51. ADMUX=(FIRST_ADC_INPUT|ADC_VREF_TYPE)+input_index;
52. // Start the AD conversion
53. ADCSRA|=0x40;
54. }
55.
56.
57. // Declare your global variables here
58. void lcd_putnum(unsigned int d)
59. {
60. unsigned char donvi, chuc, tram;
61. donvi=d%10;
62. d=d/10;
63. chuc=d%10;
64. d=d/10;
65. tram=d%10;
66. d=d/10;
67.
68. if(tram>0)
69. {
70. lcd_putchar(48+tram);
71. lcd_putchar(48+chuc);
72. lcd_putchar(48+donvi);
73.
74. }
75. else if(chuc>0)
76. {
77. lcd_putchar(48+chuc);
78. lcd_putchar(48+donvi);
79. lcd_putsf(" ");
80.
81. }
82. else {
83. lcd_putchar(48+donvi);
84. lcd_putsf(" ");
85. lcd_putsf(" ");
86.
87. }
88. }
89.
90. void main(void)
91. {
92. // Declare your local variables here
93.
94. // Input/Output Ports initialization
95. // Port A initialization
96. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
97. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
98. PORTA=0x00;
99. DDRA=0x00;
100.
101. // Port B initialization
102. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
103. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
104. PORTB=0x00;
105. DDRB=0x00;
106.
107. // Port C initialization
108. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
109. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
110. PORTC=0x00;
111. DDRC=0x00;
112.
113. // Port D initialization
114. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
115. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
116. PORTD=0x00;
117. DDRD=0x00;
118.
119. // Timer/Counter 0 initialization
120. // Clock source: System Clock
121. // Clock value: Timer 0 Stopped
122. // Mode: Normal top=FFh
123. // OC0 output: Disconnected
124. TCCR0=0x00;
125. TCNT0=0x00;
126. OCR0=0x00;
127.
128. // Timer/Counter 1 initialization
129. // Clock source: System Clock
130. // Clock value: Timer 1 Stopped
131. // Mode: Normal top=FFFFh
132. // OC1A output: Discon.
133. // OC1B output: Discon.
134. // Noise Canceler: Off
135. // Input Capture on Falling Edge
136. // Timer 1 Overflow Interrupt: Off
137. // Input Capture Interrupt: Off
138. // Compare A Match Interrupt: Off
139. // Compare B Match Interrupt: Off
140. TCCR1A=0x00;
141. TCCR1B=0x00;
142. TCNT1H=0x00;
143. TCNT1L=0x00;
144. ICR1H=0x00;
145. ICR1L=0x00;
146. OCR1AH=0x00;
147. OCR1AL=0x00;
148. OCR1BH=0x00;
149. OCR1BL=0x00;
150.
151. // Timer/Counter 2 initialization
152. // Clock source: System Clock
153. // Clock value: Timer 2 Stopped
154. // Mode: Normal top=FFh
155. // OC2 output: Disconnected
156. ASSR=0x00;
157. TCCR2=0x00;
158. TCNT2=0x00;
159. OCR2=0x00;
160.
161. // External Interrupt(s) initialization
162. // INT0: Off
163. // INT1: Off
164. // INT2: Off
165. MCUCR=0x00;
166. MCUCSR=0x00;
167.
168. // Timer(s)/Counter(s) Interrupt(s) initialization
169. TIMSK=0x00;
170.
171. // Analog Comparator initialization
172. // Analog Comparator: Off
173. // Analog Comparator Input Capture by Timer/Counter 1: Off
174. ACSR=0x80;
175. SFIOR=0x00;
176.
177. // ADC initialization
178. // ADC Clock frequency: 1000.000 kHz
179. // ADC Voltage Reference: AREF pin
180. // ADC Auto Trigger Source: None
181. // Only the 8 most significant bits of
182. // the AD conversion result are used
183. ADMUX=FIRST_ADC_INPUT|ADC_VREF_TYPE;
184. ADCSRA=0xCB;
185.
186. // LCD module initialization
187. lcd_init(16);
188.
189. // Global enable interrupts
190. #asm("sei")
191. lcd_gotoxy(0,0);
192. lcd_putsf("ADC");
193.
194. while (1)
195. {
196. // Place your code here
197. lcd_gotoxy(4,1);
198. lcd_putnum(adc_data[0]);
199. };
200. }
201.
202.
Bài 6 : Lâp trình giao tiếp máy tính RS232
Tóm tắt:Qua bài này các bạn có thể gửi và nhận các kí tự lên máy tính từ avr .Sử dụng phần Terminal
của codevision.
Giới thiệu :
vào Tool/Terminal ta có :
Sau khi thiết lập như trên vđk và PC giống nhau về tốc độ và khung truyền .
khi giao tiếp ta click vào biểu tượng hình máy tính :
UCSRA=0x00;
UCSRB=0x90; //E ngat nhan va E cho nhan
UCSRC=0x86; // che do
UBRRH=0x00;
UBRRL=0x33; // baud =9600 of 8Mhz tan so thach anh
VD: Gửi tín hiệu gõ ở terminal , vđk nhận và hiển thị lên LCD
Chú ý :
getchar(); là lệnh nhận giá trị từ chân RX từ PC
putchar(var); gửi var ra chân TX lên PC
1.
2.
3.
4. /*****************************************************
5. This program was produced by the
6. CodeWizardAVR V1.24.8d Professional
7. Automatic Program Generator
8. © Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
9. http://www.hpinfotech.com
10.
11. Project :
12. Version :
13. Date : 1/10/2008
14. Author :Tuan Le ngoc
15. Company : BIA++
16. Comments:
17.
18.
19. Chip type : ATmega16L
20. Program type : Application
21. Clock frequency : 4.000000 MHz
22. Memory model : Small
23. External SRAM size : 0
24. Data Stack size : 256
25. *****************************************************/
26.
27. #include <mega16.h>
28. #include <delay.h>
29. #include<stdio.h>
30.
31. // Alphanumeric LCD Module functions
32. #asm
33. .equ __lcd_port=0x15 ;PORTC
34. #endasm
35. #include <lcd.h>
36.
37.
38. #define RXB8 1
39. #define TXB8 0
40. #define UPE 2
41. #define OVR 3
42. #define FE 4
43. #define UDRE 5
44. #define RXC 7
45.
46. #define FRAMING_ERROR (1<<FE)
47. #define PARITY_ERROR (1<<UPE)
48. #define DATA_OVERRUN (1<<OVR)
49. #define DATA_REGISTER_EMPTY (1<<UDRE)
50. #define RX_COMPLETE (1<<RXC)
51.
52.
53.
54.
55. unsigned char test;
56.
57.
58.
59.
60.
61.
62.
63. void init_comm(void )
64. {
65. // init che do cong I/O
66. DDRD.0=0;PORTD.0=1;
67. DDRD.1=1;
68.
69. // CHE DO KO DONG BO ,8 BIT , 1 BIT STOP ,U2X=0,ko dung parity
70.
71. UCSRA=0x00;
72. UCSRB=0x90; //E ngat nhan va E cho nhan
73. UCSRC=0x86;
74. UBRRH=0x00;
75. UBRRL=0x33; // baud =9600 of 8Mhz
76.
77. }
78. ////////////
79.
80.
81.
82. void main(void)
83. {
84. s1=1;s2=s3=s4=0;
85. // Input/Output Ports initialization
86. // Port A initialization
87. // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
88. // State7=T State6=T State5=T State4=T State3=T State2=T State1=T
State0=T
89.
90. PORTA=0x00;
91. DDRA=0x01;
92.
93. // Port B initialization
94. // Func7=Out Func6=Out Func5=Out Func4=In Func3=In Func2=In Func1=In
Func0=In
95. // State7=1 State6=1 State5=1 State4=P State3=P State2=P State1=P
State0=P
96. PORTB=0x00;
97. DDRB=0xFF;
98.
99. // Port C initialization
100. // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In
Func0=In
101. // State7=T State6=T State5=T State4=T State3=1 State2=T State1=T
State0=T
102. PORTC=0xFF;
103. DDRC=0xFF;
104.
105. // Port D initialization
106. // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In
Func1=Out Func0=Out
107. // State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=1
State0=1
108. PORTD=0xF3;
109. DDRD=0xF3;
110.
111.
112. // Timer/Counter 0 initialization
113. // Clock source: System Clock
114. // Clock value: 3.906 kHz
115. // Mode: Normal top=FFh
116. // OC0 output: Disconnected
117. TCCR0=0x00;
118. TCNT0=0x00;
119. OCR0=0x00;
120.
121. // Timer/Counter 1 initialization
122. // Clock source: System Clock
123. // Clock value: 3.906 kHz
124. // Mode: Ph. correct PWM top=00FFh
125. // OC1A output: Inverted
126. // OC1B output: Inverted
127. // Noise Canceler: Off
128. // Input Capture on Falling Edge
129. //TCCR1A=0xF1;
130. //TCCR1B=0x05;
131. TCCR1A=0x00;
132. TCCR1B=0x04;
133. TCNT1H=0x00;
134. TCNT1L=0x00;
135. ICR1H=0x00;
136. ICR1L=0x00;
137. OCR1AH=0x00;
138. OCR1AL=0x00;
139. OCR1BH=0x00;
140. OCR1BL=0x00;
141.
142. // Timer/Counter 2 initialization
143. // Clock source: System Clock
144. // Clock value: 15.625 kHz
145. // Mode: Normal top=FFh
146. // OC2 output: Disconnected
147. ASSR=0x00;
148. TCCR2=0x00;
149. TCNT2=0x00;
150. OCR2=0x00;
151.
152.
153.
154. // External Interrupt(s) initialization
155. // INT0: Off
156. // INT1: Off
157. // INT2: Off
158. MCUCR=0x00;
159. MCUCSR=0x00;
160.
161. // Timer(s)/Counter(s) Interrupt(s) initialization
162. TIMSK=0x04;
163.
164. // Analog Comparator initialization
165. // Analog Comparator: Off
166. // Analog Comparator Input Capture by Timer/Counter 1: Off
167. ACSR=0x80;
168. SFIOR=0x00;
169.
170.
171.
172. //SFIOR&=0x1F;
173.
174. // LCD module initialization
175.
176. // Global enable interrupts
177. //#asm("sei")
178. // LCD module initialization
179. lcd_init(16);
180. init_comm();
181. while (1)
182. {
183. // Place your code here
184. lcd_gotoxy(0,0);
185. lcd_putsf("Giao tiep :");
186. //test=getchar();
187. //putchar(test);
188.
189.
190. lcd_gotoxy(12,1);
191.
192. test=getchar();
193. lcd_putchar(test);
194.
195.
196.
197. }
198.
199. }
200.
201.
202.