ใบงานที่ 5 การอินเตอร์รัพท์ (Interrupt)

ใบงานที่ 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   
ขอบคุณครับ