การทดลองที่ 2 การใช้งาน 7-segment, interrupts ... ·...

18
305381 Microcontroller Interface Lab 2 1 ภาควิชาวิศวกรรมไฟฟ้ าและคอมพิวเตอร์ มหาวิทยาลัยนเรศวร การทดลองที ่ 2 การใช้งาน 7-segment, Interrupts และ Timers วัตถุประสงค์ 1. เพื่อให้นิสิตสามารถเขียนโปรแกรมภาษา C อย่างง่ายในการควบคุมไมโครคอนโทรลเลอร์ได้ 2. เพื่อให้นิสิตเข้าใจการต่อใช้งาน 7-segment 3. เพื่อให้นิสิตเข้าใจการทางานของ Interrupts และ Timers อุปกรณ์ในการทดลอง 1. เครื่องคอมพิวเตอร์ PC พร้อมโปรแกรมสาหรับการเขียนและคอมไพล์ภาษา C - โปรแกรม Keil51 v.xx 2. บอร์ดไมโครคอนโทรลเลอร์ MCS-51 3. สายต่อพอร์ตอนุกรม 4. บอร์ด 7- segment display วิธีการทดลอง 1. ใช้ IDE สาหรับพัฒนาชุดคาสั่งของ MCS-51 ด้วยภาษา C โดยใช้ Keil51เพื่อเขียนโปรแกรม Lab02_x.c 2. สร้างโปรเจ็คใหม่โดยเลือก New project ตั้งชื่อเป็น Lab02 แล้วกด ok

Upload: others

Post on 24-Feb-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 1

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

การทดลองท 2 การใชงาน 7-segment, Interrupts และ Timers

วตถประสงค

1. เพอใหนสตสามารถเขยนโปรแกรมภาษา C อยางงายในการควบคมไมโครคอนโทรลเลอรได

2. เพอใหนสตเขาใจการตอใชงาน 7-segment

3. เพอใหนสตเขาใจการท างานของ Interrupts และ Timers

อปกรณในการทดลอง

1. เครองคอมพวเตอร PC พรอมโปรแกรมส าหรบการเขยนและคอมไพลภาษา C - โปรแกรม Keil51 v.xx

2. บอรดไมโครคอนโทรลเลอร MCS-51

3. สายตอพอรตอนกรม

4. บอรด 7- segment display

วธการทดลอง

1. ใช IDE ส าหรบพฒนาชดค าสงของ MCS-51 ดวยภาษา C โดยใช Keil51เพอเขยนโปรแกรม Lab02_x.c

2. สรางโปรเจคใหมโดยเลอก New project ตงชอเปน Lab02 แลวกด ok

Page 2: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 2

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

Page 3: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 3

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

3. เลอก CPU : Philips P89C51RD2xx

Page 4: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 4

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

4. จากนนคลกทป มวงกลมสแดง เพอสรางหนาตางส าหรบเขยนโปรแกรม( หนาตาง Text1 ) สรางไฟลใหม เขยนโปรแกรมและ save โดยใชชอ Lab02_x.c (x แทนหมายเลขการทดลอง )

Page 5: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 5

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

5. คลกขวาท Source Group 1 แลวเลอก Add file to group ‘Source Group 1’ แลวเลอก File Lab02_x.c

Page 6: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 6

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

6. เขยนโปรแกรมใหเสรจแลวคลกท วงกลมท 1 เพอท าการ compile ถาหากวาไมพบ Error โดยทถาเกด error ขนโปรแกรมจะแสดงวา error กท (ด windows output ดานลางของโปรแกรม ) คลกท วงกลมท 2 เพอให keil ตรวจสอบและท าการ debug พรอมทงตรวจสอบขนาดของโปรแกรมทเราสรางขนและพรอมส าหรบการทดสอบการท างานโปรแกรม

7. Build โปรแกรมทเขยน โดยกอนหนานน click ขวา ท Target1 เลอก Options for Target ‘Target1’ ท Tab Output เลอก create hex file โดยเลอกท check box ‘Create Hex file’ File ท ไดจะมชอเหมอนกบชอโปรเจค คอ Lab02.hex สามารถเปลยนแปลงชอไดโดยแกชอ output file ลงในชอง ‘Name of Executable’

Page 7: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 7

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

18. ท าการทดลองโดยโปรแกรมลงบนบอรด MCS-51 โดยใชบอรดไมโครคอนโทรลเลอรซงมลกษณะวงจรดงน

a. ตอสายจาก com1 ของ computer เขากบบอรดโดยใชสายทแจกใหเทานน ท าการโหลดผานโปรแกรม Flash magic ดงน

Page 8: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 8

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

b. เปดโปรแกรม Flash magic โดยท าการตงคาตางๆ ดงน เลอกท Options----> Advanced Options

c. คลกเลอก Use DTR to control RST ออก

Page 9: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 9

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

d. ทหมายเลข 1 เลอกรนของ MCS-51 และ com port ใหตรงกบทเราใช ตงคาอนๆ ตามหมายเลข 2 และ 4 ตามรปพรอมทง Browse ไฟลทหมายเลข 3 เลอก Hex file จากนนคลกเลอก Start ทหมายเลข 5แลวโปรแกรมจะให Reset MCS-51 เพอโหลด Hex file ลงอปกรณ

e. กดป ม reset ทบอรดไมโครคอนโทรลเลอร

Page 10: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 10

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

19. ส าหรบการทดลองท 2.1 และ 2.2 ตอ Port 0 เขากบ connector D0-D7 และ Port 1 เขากบ connector A0-A3 ของบอรด 7-segment และตอ switch 2 ตวเขากบ P3.2 และ P3.3

20. ส าหรบการทดลองท 2.3 และ 2.4

a. เอาสาย serial ออกแลวตอสาย จากบอรด MCS-51 Port 1.0 กบ output ขว – (สายสด า) จากบอรด Solid-state switch และ ตอ output ขว + (สายสแดง) กบ Vcc ของบอรด MCS-51

b. ตอสายไฟเขากบ 220 VAC output ground ของบอรด Solid-state switch แลวเสยบปลก

c. ตอขว AIN ของบอรดล าโพงเขากบ บอรด MCS-51 port 3.0 พรอมทงตอ Vcc กบ ground ของทงสองบอรดเขาดวยกน (บอรด MCS-51จะมขว ground อย 3 อน)

5V Gnd Gnd 5V

5Vdc 5Vdc

21. เมอท าการทดลองเสรจแลวท าแบบฝกหดสงใหครชางตรวจใหคะแนน

การทดลองท 2.1_________________________________________________________________________

/* Filename lab02_1.C

Description Test Output 7 Segments

Hardware P89v52RD2

Clock 11.0592 MHz

Number of oscillations per instruction 12

Compiler Keil C51 v8

*/

#include<reg51.h>

#include <intrins.h>

#include <absacc.h>

unsigned char Select;

unsigned char code data7[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

/********** BASIC FUNCTION **********/

void dmsec (unsigned int count) // mSec Delay

{ unsigned int i; // Keil CA51 (x2)

while (count) {

i = 230; while (i>0) i--;

count--; }

}

/********** MAIN PROGRAM **********/

void main()

Page 11: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 11

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

{

unsigned int j;

while(1)

{ for (j=0;j<=7;j++)

{

Select = j;

P0 = data7[j];

P1=Select;

dmsec(1000);

dmsec(500); }

}

}การทดลองท 2.2_________________________________________________________________________

/* Filename lab02_2.C

Description Test external interupt 0/1

Hardware P89v52RD2

Clock 11.0592 MHz

Number of oscillations per instruction 12

Compiler Keil C51 v8

*/

#include<reg51.h>

#include <intrins.h>

char Outdigit;

bit bdata LeftFlag;

unsigned char code data7[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};

void ex0_isr (void) interrupt 0

{ LeftFlag=1; }

void ex1_isr (void) interrupt 2

{ LeftFlag=0; }

void dmsec (unsigned int count) { // mSec Delay

unsigned int i; // Keil CA51 (x2)

while (count)

{ i = 230; while (i>0) i--;

count--; }

}

void main (void)

{

IT0 = 1; // Configure interrupt 0 for falling edge

Page 12: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 12

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

EX0 = 1; // Enable EX0 Interrupt

IT1 = 1; // Configure interrupt 1 for falling edge

EX1 = 1; // Enable EX1 Interrupt

EA = 1; // Enable Global Interrupt Flag

Outdigit = 0x00;

LeftFlag=1;

while (1)

{

P1 = Outdigit;

P0 = data7[Outdigit];

dmsec(500);

if(LeftFlag)

{ Outdigit = Outdigit+1;

if (Outdigit > 8)

{Outdigit=0;}

}//end if

if(!LeftFlag)

{ Outdigit = Outdigit-1;

if (Outdigit < 0)

{Outdigit=7;}

} //end if

}//End of while

}//End of program

การทดลองท 2.3_________________________________________________________________________

/* Filename lab02_3.C

Description Timer Software delay

Hardware P89v52RD2

Clock 11.0592 MHz

Number of oscillations per instruction 12

Compiler Keil C51 v8

*/

#include<reg51.h>

#include<intrins.h>

#include <absacc.h>

unsigned int count1;

sbit SOUND = P3^0;

sbit light = P1^0;

/********** BASIC FUNCTION **********/

void delayms(count1) //delay 1ms

Page 13: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 13

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

{ unsigned int count2;

/* Set T/C0 Mode */

TMOD = (TMOD & 0xF0) | 0x01;

/* Load Timer with FFFFH- 922D=FC65H */

TH0 = 0xFC;

TL0 = 0x65;

TR0=1;

count2=0;

while (count2<=count1)

if (TF0==1)

{

TR0=0; /* Stop Timer 0*/

TF0=0;

count2++;

TH0 = 0xFC;

TL0 = 0x65;

TR0 = 1; /* Start Timer 0*/

}

}

/*************************************/

void main (void)

{ unsigned int i,j;

while (1)

{

/*********job 1 light********************/

light=0; //light on

delayms(1000);

light=1;//light off

/*********job 2 sound********************/

for(i=0;i<=2000;i++)

{

SOUND = 0;

for(j=1;j<=50;j++);

SOUND = 1;

for(j=1;j<=50;j++);

}

/*************************************/

}

}

การทดลองท 2.4_________________________________________________________________________

Page 14: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 14

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

/* Filename lab02_4.C

Description Timer Hardware Delay

Hardware P89v52RD2

Clock 11.0592 MHz

Number of oscillations per instruction 12

Compiler Keil C51 v8

*/

#include<reg51.h>

#include<intrins.h>

#include<absacc.h>

sbit SOUND = P3^0;

sbit light = P1^0;

unsigned int count;

void timer0_ISR (void) interrupt 1

{

TR0 = 0; /* Stop Timer 0*/

/* Load Timer with FFFFH- 922D=FC65H */

TH0 = 0xFC;

TL0 = 0x65;

TR0 = 1; /* Start Timer 0*/

count++;

/*********job 1 light********************/

if (count>=1000)

{light=!light;

count=0;}

}// end Timer0 ISR

/*************************************/

void main (void)

{unsigned int i,j;

count=0;

TMOD = (TMOD & 0xF0) | 0x01; /* Set T/C0 Mode */

/* Load Timer with FFFFH- 922D=FC65H */

TH0 = 0xFC;

TL0 = 0x65;

EA=1;

ET0=1;

TR0 = 1; /* Start Timer 0*/

while (1)

{

/*********job 2 sound********************/

for(i=0;i<=2000;i++)

{ SOUND = 0;

for(j=1;j<=50;j++);

SOUND = 1;

for(j=1;j<=50;j++); }

Page 15: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 15

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

/*************************************/

}//end while

}// end main

Page 16: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 16

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

แบบฝกหด

1. เขยนโปรแกรมเพอเปนระบบกนขโมย โดยทสญญาณกนขโมยจะดงพรอมดวงไฟตดเมอมคนบกรก (มสญญาณ interrupt 0 จากภายนอก) และเมอมคนเขามาตรวจสอบจะสามารถหยดการเตอนไดดวยการกดรหส แสดงรหสทกดบน 7-segment และวาดรปวงจรและจ าลองการท างาน

การบาน

1. เขยน Flowchart อธบายการท างานของโปรแกรมท 2.1, 2.2, 2.3, 2.4 และแบบฝกหด

Reference

http://www.keil.com/support/man/docs/c166/c166_libref.htm

Page 17: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 17

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

Page 18: การทดลองที่ 2 การใช้งาน 7-segment, Interrupts ... · 2016-01-25 · 1. ใช้ IDE ส าหรับพัฒนาชุดค าสั่งของ

305381 Microcontroller Interface Lab 2 18

ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร

ENB

ENB

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

a

b

c

d

e

f

g

h

1/e

2/d

4/c

5/h

6/b

7/a

9/f

10/g

R 220

1

2

4

5

6

7

9

10

1

2

4

5

6

7

9

10

1

2

4

5

6

7

9

10

1

2

4

5

6

7

9

10

1

2

4

5

6

7

9

10

1

2

4

5

6

7

9

10

1

2

4

5

6

7

9

10

74LS541

P015

P114

13P2

12P3

Q0

Q1

Q2

Q3

1

2

3

4

Q4

Q5

Q6

Q7

5

6

7

9

74LS145

3 or 83 or 8 3 or 8 3 or 8 3 or 8 3 or 8 3 or 8 3 or 8

D4

D3

D2

D7

D1

D0

D5

D6

19

A0

A1

A2

A3