单片机实验V3.0

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

P1口实验实验题目1、P1口做输出口,接八只发光二极管,编写程序,使其循环点亮。2、P1口低四位接四只发光二极管L0-L3,P1口高四位接开关K0-K3,编写程序,将开关的状态在发光二极管上显示出来。硬件原理图EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD108051A02A13A24A35A46A57A68A79B018B117B216B315B414B513B612B711E19DIR174HC245L0L1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7L2L3L4L5L6L7GNDVCC470Ω470Ω470Ω470Ω470Ω470Ω470Ω470Ω连线方法•题目1:89C51的P1.0—P1.7分别接发光二极管L0—L7•题目2:P1口的P1.0—P1.3接L0-L3,•P1口的P1.4—P1.7接K0-K3参考程序-题目1•org0000h•ljmpstartstart:mova,#01hloop:movp1,a•lcalldel•rla•ljmploopdel:movr1,#10;延时1秒,12MHz•lp1:movr2,#200•lp2:movr3,#249•djnzr3,$•djnzr2,lp2•djnzr1,lp1•ret•end参考程序-题目2•ORG0000H•LJMPSTART•START:MOVA,P1•SWAPA•ORLA,#0F0H•MOVP1,A•LJMPSTART•END参考程序-题目1•#includereg51.h•#defineucharunsignedchar•#defineuintunsignedint•voiddelay(unsignedintN)•{•inti;•for(i=0;iN;i++);•}•main()•{•uchari,a;••while(1)•{•a=0x01;•for(i=0;i8;i++)•{•P1=a;•delay(50000);•a=a1;•}•}•}参考程序-题目2•#includereg51.h•#defineucharunsignedchar•#defineuintunsignedint•main()•{•uchari;••while(1)•{•i=P1;•i=i4;•P1=i|0xf0;•}•}流程图设置初值输出延时1秒循环左移开始读开关状态半字节交换高四位置1开始输出题目1流程图题目2流程图外部中断实验•实验题目•P1口做输出口,接八只发光二极管,编写程序,使其循环点亮。以单脉冲输出端做为中断申请,当第一次产生外部中断时,使发光二极管全亮,延时1秒后返回中断之前的状态;当第二次产生外部中断时,使发光二极管全灭,延时1秒后返回中断之前的状态;以后如上述一直循环下去。硬件原理图EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD108051A02A13A24A35A46A57A68A79B018B117B216B315B414B513B612B711E19DIR174HC245L0L1P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7L2L3L4L5L6L7GNDVCC470Ω470Ω470Ω470Ω470Ω470Ω470Ω470Ω单脉冲P3.2连线方法•P1.0—P1.7分别接发光二极管L0—L7,•P3.2接单脉冲输出端参考程序-主程序•ORG0000H•LJMPSTART•ORG0003H•LJMPPINT0START:SETBEX0•SETBIT0•SETBEA•MOVA,#01H•MOVR4,#00HLOOP:MOVP1,A•LCALLM1S•RLA•SJMPLOOP•参考程序-中断服务程序•PINT0:PUSHACC•MOVA,P1•PUSHACC•CJNER4,#00H,N01•INCR4•MOVP1,#0FFH•DLAY:LCALLM2S•POPACC•MOVP1,A•POPACC•RETI•N01:MOVR4,#00H•MOVP1,#00H•SJMPDLAY参考程序-延时子程序•M1S:MOVR1,#18•DEL1:MOVR2,#200•DEL2:MOVR3,#126•DEL3:DJNZR3,DEL3•DJNZR2,DEL2•DJNZR1,DEL1•RET•M2S:MOVR5,#18•DEI1:MOVR6,#200•DEI2:MOVR7,#126•DEI3:DJNZR7,DEI3•DJNZR6,DEI2•DJNZR5,DEI1•RET•END外部中断-C语言-中断处理•#includereg51.h•#defineucharunsignedchar•#defineuintunsignedint•bitled=0;•voiddelay(unsignedintN)•{•inti;•for(i=0;iN;i++);•}•voidpint0(void)interrupt0using1•{•if(led==0){•P1=0xff;•delay(50000);•delay(50000);•led=1;•}•else{•P1=0x00;•delay(50000);•delay(50000);•led=0;•}•}外部中断-C语言-主函数•main()•{•uchari,a;•led=0;•IT0=1;•EX0=1;•EA=1;•while(1)•{•a=0x01;•for(i=0;i8;i++)•{•P1=a;•delay(50000);•a=a1;•}•}•}定时器实验•实验题目•89C51内部定时器T1,按方式1工作、即做为十六位定时器使用每0.05秒溢出一次。P1口的P1.0-P1.7分别接八只发光二极管。要求编写程序模拟一时序控制装置。开机后,第一秒钟L0、L2亮,第二秒钟L1、L3亮,第三秒钟L4、L6亮,第四秒钟L5、L7亮,第五秒钟L0、L2、L4、L6亮,第六秒钟L1、L3、L5、L7亮,第七秒钟全亮,第八秒钟全灭,以后又从头开始,一直循环下去。实验原理说明•定时常数的确定•定时器/计数器的输入脉冲与机器周期一样,为振荡器频率的1/12。本实验系统中,时钟频率为12MHz。实现0.05秒的延时,要在定时器1中设置一个时间常数即计数初值,使其每隔0.05秒溢出一次,再用一个寄存器计溢出的次数,计20次即可实现1秒延时。时间常数按以下公式计算:•计算出X之后,换算成十六进制数将高八位放在TH1中,低八位放在TL1中。05.012)2(16fX参考程序-查询方式•ORG0000HLJMPSTARTSTART:MOVTMOD,#10HMOVTH1,#3CH;12MHz,定时50ms•MOVTL1,#0B0H•MOVR2,#20•SETBTR1•LOOP:MOVDPTR,#TAB•MOVR7,#08H•WAIT:JNBTF1,$•MOVTH1,#3CH•MOVTL1,#0B0H•CLRTF1•DJNZR2,WAIT•MOVR2,#20•CLRA•MOVCA,@A+DPTR•INCDPTR•MOVP1,A•DJNZR7,WAIT•SJMPLOOP•TAB:DB05H,0AH,50H,0A0H,55H,0AAH,0FFH,00H•END参考程序-中断方式•org0000h;在数码管上显示0-9;P1.0—P1.7接A—H;G0接+5V或接一个开关;数码管右侧开关向上拨(外驱)!•ljmpstart•org001bh•ljmppit1start:movr4,#00h;显示的数字•movth1,#3CH;定时50ms•movtl1,#0B0H•movtmod,#10h•setbtr1•setbet1•setbea•movr5,#00h;加1计数loop:movdptr,#seg•mova,r4•movca,@a+dptr•movp1,a•movr7,#00h;延时•djnzr7,$•movr7,#00h•djnzr7,$•ljmploop•pit1:movth1,#3ch•movtl1,#0B0h•incr5•cjner5,#20,quit•movr5,#00h•incr4•cjner4,#0ah,quit•movr4,#00h•quit:reti•seg:db3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh•end参考程序-中断方式(C语言)•#includeREG51.h•#defineucharunsignedchar•uchardatat=0,m1s=0;•ucharcodeseg[]={0x05,0x0a,0x50,0xa0,0x55,0xaa,0xff,0x00};•voidtime1(void)interrupt3•{•TH1=0x3C;//T150ms/12MHz•TL1=0xB0;//设定T1计数初值•t++;•if(t==20){•t=0;•m1s++;•if(m1s==8)m1s=0;•}••}参考程序-中断方式(C语言)•main()•{•TMOD=0x10;//T1方式1•TH1=0x3C;//T150ms/12MHz•TL1=0xB0;//设定T1计数初值•ET1=1;//允许定时器1中断•TR1=1;//允许定时器1计数•EA=1;//开中断•t=0;•while(1)•{•P1=seg[m1s];•}•}串行口实验—串并转换实验•利用8051单片机串行口,和并行输出串行移位寄存器74LS164,扩展输出口,在数码显示器上循环显示0—9这10个数字。实验电路EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD108031A1B2Q03Q14Q25Q36Q410Q511Q612Q713CLK8MR974LS164P3.0P3.1P3.1P3.0abfcgdeDPYdpgfedcbadpQ0Q1Q2Q3Q4Q5Q6Q7ABCDEFGHG0100abfcgdeDPYdpgfedcbadpG3dpgfedcbaabfcgdeDPYdpgfedcbadpG2dpgfedcbaabfcgdeDPYdpgfedcbadpG1dpgfedcbaabfcgdeDPYdpgfedcbadpG4dpgfedcbaG0abfcgdeDPYdpgfedcbadpG5dpgfedcbaG0dpgfedcba连线方法•8051的P3.1(TXD)端接74LS164的CLK端,•P3.0(RXD)端接74LS164的AB端。•74LS164的Q0-Q7分别接数码显示的H-A,数码显示的G0接高电平(+5V),G1-G5接低电平(GND)。数码管右侧的开关拨向“外驱”方式。参考程序—汇编语言•ORG0000H•LJMPSTART•START:MOVR1,#00H•MOVSCON,#00H•LOOP:MOVDPTR,#SEGMOVA,R1•MOVCA,@A+DPTR•MOVSBUF,A•JNBTI,$•CLRT

1 / 74
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功