การทดลองที่ 2 การใช้งาน 7-segment, interrupts ... ·...
TRANSCRIPT
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
305381 Microcontroller Interface Lab 2 2
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
305381 Microcontroller Interface Lab 2 3
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
3. เลอก CPU : Philips P89C51RD2xx
305381 Microcontroller Interface Lab 2 4
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
4. จากนนคลกทป มวงกลมสแดง เพอสรางหนาตางส าหรบเขยนโปรแกรม( หนาตาง Text1 ) สรางไฟลใหม เขยนโปรแกรมและ save โดยใชชอ Lab02_x.c (x แทนหมายเลขการทดลอง )
305381 Microcontroller Interface Lab 2 5
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
5. คลกขวาท Source Group 1 แลวเลอก Add file to group ‘Source Group 1’ แลวเลอก File Lab02_x.c
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’
305381 Microcontroller Interface Lab 2 7
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
18. ท าการทดลองโดยโปรแกรมลงบนบอรด MCS-51 โดยใชบอรดไมโครคอนโทรลเลอรซงมลกษณะวงจรดงน
a. ตอสายจาก com1 ของ computer เขากบบอรดโดยใชสายทแจกใหเทานน ท าการโหลดผานโปรแกรม Flash magic ดงน
305381 Microcontroller Interface Lab 2 8
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
b. เปดโปรแกรม Flash magic โดยท าการตงคาตางๆ ดงน เลอกท Options----> Advanced Options
c. คลกเลอก Use DTR to control RST ออก
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 ทบอรดไมโครคอนโทรลเลอร
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()
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
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
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_________________________________________________________________________
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++); }
305381 Microcontroller Interface Lab 2 15
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
/*************************************/
}//end while
}// end main
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
305381 Microcontroller Interface Lab 2 17
ภาควชาวศวกรรมไฟฟาและคอมพวเตอร มหาวทยาลยนเรศวร
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