ใบงานที่ 5 การอินเตอร์รัพท์ (Interrupt)
1.วัตถุประสงค์
1) เพื่อศึกษาโครงสร้างของการอินเตอร์รัพท์ภายใน PIC16F877A
2) เพื่อศึกษาการเขียนโปรแกรมเพื่อใช้งานอินเตอร์รัพท์ภายนอก
3) เพื่อศึกษาการเกิดอินเตอร์รัพท์จากอุปกรณ์ภายนอกไปประยุกต์ใช้ร่วมโปรแกรมอื่นๆ
2.ทฤษฎี
โปรแกรม 5.1 นับจำนวนการเกิด interrupt แสดงผลทาง 7Segment (1)
1: /*****************************************/
2: // LAB 5_1 Interrupt
3: /*****************************************/
4: // Connector
5: // Port B To SW_board with IDE10
6: // Port D To Segment_board(Segment) with IDE10
7: // Port C To Segment_board(Common) with IDE10
8: /*****************************************/
9:
10: #include <16F877A.h>
11: #fuses HS,NOWDT,NOPUT,NOBROWNOUT
12: #use delay(clock=20000000)
13:
14: char number_segment[10]= {0x3F,0x06,0x5B,0x4F,0x66
15: 0x6D,0x7D,0x07,0x7F,0x6F};
16: unsigned long number=0;
17:
18: void segment_display()
19: {
20: unsigned int number_digit=0;
21:
22: output_c(0b00000000);
23: number_digit=number/1000;
24: output_d(number_segment[number_digit]);
25: output_c(0b00000001);
26: delay_ms(1);
27:
28: output_c(0b00000000);
29: number_digit=(number/100)%10;
30: output_d(number_segment[number_digit]);
31: output_c(0b00000010);
32: delay_ms(1);
33:
34: output_c(0b00000000);
35: number_digit=(number/10)%10;
36: output_d(number_segment[number_digit]);
37: output_c(0b00000100);
38: delay_ms(1);
39:
40: output_c(0b00000000);
41: number_digit=number%10;
42: output_d(number_segment[number_digit]);
43: output_c(0b00001000);
44: delay_ms(1);
45: }
***Download ไฟล์ได้จาก***
http://cid-c0a6064779796550.skydrive.live.com/browse.aspx/.Public
Download คู่มือไม่ได้โปรดแจ้ง electronicpro-1@hotmail.com
ขอบคุณครับ
ความคิดเห็น