实验五 中断系统实验有急救车的交通灯实验附源代码原理图

合集下载

C51代码交通灯Proteus原理图

C51代码交通灯Proteus原理图

吉首大学单片机交通灯设计原理图局部放大程序代码#include<reg51.H>#define uchar unsigned char #define uint unsigned intuchar code table[]={ //共阴极数码管码表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0xC9,0xFF,0x40};//设置码,测试码,不计时码void delay(uint x);//延时函数void display(uchar,uchar,uchar,uchar); //数码管显示函数void mkeys(); //键盘函数void traffic(); //交通灯函数uchar num,num1,num2, //1南北 2东西shi1,ge1,shi2,ge2,value1,value2,//南北绿灯时间黄灯时间value3,value4,//东西绿灯时间黄灯时间count1,count2,flag1,flag2; //南北标记东西标记void main(){TMOD=0x01;TH0=(65536-45872)/256;TL0=(65536-45872)%256;EA=1;ET0=1;TR0=1;/*初状态*/value1=15; //南北黄绿灯默认值value2=5;value3=10; //东西黄绿灯默认值value4=5;num1=value1; //南北数码管先绿灯时间num2=value2+value1;//东西红灯时间shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;P1=0x41;//初始状态:东西红灯南北绿灯 20 15while(1){if(num==20) //定时器1s{num=0;num1--;num2--;traffic();shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;}mkeys();display(shi1,ge1,shi2,ge2);}}void traffic() //红绿灯主控制程序{if(num1==0){count1++;if(count1==1){P1=0x42;//东西红灯南北黄灯 5 5num1=value2;}if(count1==2){num1=value3+value4;//东西绿灯南北红灯10 15 P1=0x14;}if(count1==3){P1=0x41;// 东西黄灯南北红灯 5 5num1=value4;count1=0;}}if(num2==0){count2++;if(count2==1){//P1=0x14;//东西绿灯南北红灯num2=value3;}if(count2==2){P1=0x24;//东西黄灯南北红灯num2=value4;}if(count2==3){num2=value1+value2; //东西红灯南北绿灯num1=value1;count2=0;}}}void display(uchar shi1,uchar ge1,uchar shi2,uchar ge2) //数码管显示子函数{uchar temp;temp=P2;P2=0xfe;P0=table[shi1];delay(5);P2=0xfd;P0=table[ge1];delay(5);P2=0xfb;P0=table[shi2];delay(5);P2=0xf7;P0=table[ge2];delay(5);}void delay(uint x)//延时子函数{uinti,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}void mkeys() //4*4矩阵键盘功能子函数{uchartemp,key;P3=0xfe;//第一行线temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xee:key=0;break;case 0xde:key=1;break;case 0xbe:key=2;break;case 0x7e:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0) {//按键1:暂停TR0=~TR0; //定时器取反flag1=~flag1;//南北能够设置标志 0有效flag2=~flag2;//东西能够设置标志}if(key==1&&flag1==0){ //按键2:设置时间按钮TR0=0;P1=0x44;//禁止东南西北车辆全为红灯可以设置shi1=ge1=shi2=ge2=16;}if(key==2&&flag2==0){//按键3:设置完成重启TR0=1;num=0; //定时器初始化P1=0x41; //重新开始初状态num1=value1; //南北数码管先绿灯时间num2=value2+value1;//东西红灯时间shi1=num1/10;ge1=num1%10;shi2=num2/10;ge2=num2%10;}if(key==3&&P1==0x44){ //按键4:测试交通灯各个设备的好坏P1=0xff;delay(1000);P1=~P1;shi1=ge1=shi2=ge2=17;P1=0x44;}}}P3=0xfd;//第二行线temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xed:key=0;break;case 0xdd:key=1;break;case 0xbd:key=2;break;case 0x7d:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0&&P1==0x44){ //按键5:设置南北绿灯时间+num1=value1;if(num2!=159){ //@@@@保证交通合理,红灯最大值计时159s,绿灯不再增加num1++;value1=num1;}shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}if(key==1&&P1==0x44){ //按键6:设置南北黄灯时间+num1=value2;if(num2!=159){num1++;value2=num1;}shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}if(key==2&&P1==0x44&&value1>3){ //按键7:设置南北绿灯时间- @@@@保证交通合理,绿灯最小值计时3s,绿灯不再减少num1=value1;num1--;value1=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}if(key==3&&P1==0x44&&value2>3){ //按键8:设置南北黄灯时间- num1=value2;num1--;value2=num1;shi1=num1/10;ge1=num1%10;num2=value1+value2;//显示东西红灯时间shi2=num2/10;ge2=num2%10;}}}////||||||||||||||||||P3=0xfb;//第三行线temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xeb:key=0;break;case 0xdb:key=1;break;case 0xbb:key=2;break;case 0x7b:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0&&P1==0x44){ //按键9:设置东西绿灯时间+num2=value3;if(num1!=159){num2++;value3=num2;}shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}if(key==1&&P1==0x44){ //按键10:设置东西黄灯时间+ num2=value4;if(num1!=159){num2++;value4=num2;}shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}if(key==2&&P1==0x44&&value3>3){ //按键11:设置东西绿灯时间- num2=value3;num2--;value3=num2;shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}if(key==3&&P1==0x44&&value4>3){ //按键12:设置东西黄灯时间- num2=value4;num2--;value4=num2;shi2=num2/10;ge2=num2%10;num1=value3+value4;//显示南北红灯时间shi1=num1/10;ge1=num1%10;}}}P3=0xf7;//第四行线 2未用temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P3;temp=temp&0xf0;if(temp!=0xf0){temp=P3;switch(temp){case 0xe7:key=0;break;case 0xd7:key=1;break;case 0xb7:key=2;break;case 0x77:key=3;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}if(key==0&&P1==0x44){ //按键13:南北紧急情况:南北绿灯常亮东西红灯常亮P1=0x41;shi1=ge1=shi2=ge2=18;}if(key==1&&P1==0x44){ //按键14:东西紧急情况:东西绿灯常亮南北红灯常亮P1=0x14;shi1=ge1=shi2=ge2=18;}if(key==2&&P1==0x44){//按键15:}if(key==3&&P1==0x44){//按键16:}}}}void T0_time() interrupt 1 //定时器T0 中断子程序{TH0=(65536-45872)/256;TL0=(65536-45872)%256; num++;}。

用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯源程序代码及流程图

用单片机控制交通灯传统的交通灯控制电路一般由数字电路构成,电路复杂、体积大、成本高。

采用单片机控制交通灯不但可以解决上述问题,而且还具有时间显示功能,非常方便。

下面介绍一种用单片机控制交通灯的方法。

一、硬件硬件电路如附图。

AT89C2051的P1.7~P1.5和P1.3~P1.1直接驱动红、黄、绿灯,利用单片机的串口和二片74LS164串/并转换移位寄存器实现时间显示,七段数码管为共阴管,硬件电路极为简单。

二、软件交通灯有红、黄、绿三种。

红灯亮,停止通行;绿灯亮,允许通行;黄灯亮,作过渡。

红灯亮60秒,绿灯亮55秒,黄灯亮5秒。

每组灯的亮暗状态以2分钟为周期循环,故程序采用主、子程序方式,循环结构。

另外,为了简化电路,红、黄、绿灯采用低电平点亮。

源程序清单如下:ORG0000HSTART:MOVDRTR,#TABMOVSCON,#00HMOVP1,#6CH;点亮红、绿灯MOVR0,#0;R0清零LEFT:INCR0CJNER0,#55,LP0;R0<55,转LP0MOVP1,#6AH;R0=55,点亮红、黄灯LJMPLP1LP0:CJNER0,#60,LP1;R0<60,转LP1MOVP1,#0C6H;R0=60,点亮绿、红灯LJMPRIGHTLP1:LCALLDBDBLCALLDISPLJMPLEFT;20H为1,转LEFTRIGHT:DECR0CJNER0,#5,LP2;R0>0,转LP2MOVP1,#0A6H;R0=5,点亮黄、红灯LJMPLP3LP2:CJNER0,#0,LP3MOVP1,#6CH;R0=0,点亮红、绿灯LJMPLEFTLP3:LCALLDBDBLCALLDISPLJMPRIGHTDBDB:MOVA,R0MOVB,#10DIVABMOVR1,AMOVR2,BRETDISP:MOVA,R2MOVCA,@A+DPTRMOVSBUF,AJNBTI,$;查TI位CLRTIMOVA,R1MOVCA,@A+DPTRMOVSBUF,AJNBT1,$CLRTILCALLDEALYRETDELAY:MOVR3,#09HK1:MOVR4,#100K2:MOVR5,#250K3:DJNZR5,K3DJNZR4,K2KJNZR3,K1RETTAB:DB3FH,06H,5BHDB4FH,66HDB6DH,7DH,07HDB7FH,6FH三.实验电路及连线四.实验说明1.因为本实验是交通灯控制实验,所以要先了解实际交通灯的变化规律。

DSP十字路口交通灯(程序代码还有图哦)

DSP十字路口交通灯(程序代码还有图哦)
图4.474LS138
4.1.5数码显示输出模块
数码管显示采用了四位一体的数码管。其显示由DSP的高八位数据线控制位码显示,低八位数据线控制段码显示。其数据经过了74HC273锁存,图中锁存信号是LEDALE,清零信号是LEDCS,这两信号经过CPLD逻辑组合而来,逻辑功能描述如下:
LEDALE<=ios or not a15 or not a14 or a2 or a1 or a0;--DSP采用I/O方式访问数码管,所以DSP的控制线IS(此为IOS)和地址线组合来锁存送往数码管的数据,其地址C000h,LEDCS<=rst;--DSP的复位RS(此写成RST)来对锁存器清零。
LEDCS2<=ios or not a15 or not a14 or a2 or not a1 or a0;--DSP采用I/O方式访问指示灯,所以DSP的控制线IS(此写IOS)和地址线组合来锁存送往指示灯的数据,其地址C002h。其硬件图如下:
3.2课程设计原理………………………………………………………………………5
3.2.1系统工作原理…………………………………………………………...…5
3.2.2系统工作状态………………………………………………………...……6
4设计步骤及过程…………………………………………………………………….…....8
图3.7状态四
状态五:紧急状态下东西南北均亮红灯;
图3.8状态五
4设计步骤及过程
4.1硬件的选择
4.1.1主控制器的选择
采用TI公司DSP芯片TMS320VC5402。C5402采用改进的Harvanl处理结构,指令流水线操作。计算和处理速度很高,系统单指令周期可达到10ns。在片内提供16k的RAMห้องสมุดไป่ตู้作程序和数据存储,其最大可扩展寻址空间为1M字节。C5402提供的McBSP串口和DAM数据传送方式极大地方便它在通信领域的应用和开发。如下图所示:

红绿灯(中断程序)

红绿灯(中断程序)

一.内容介绍内容:1.执行程序时,初始态为四个路口的红灯全亮之后;2.东西路口的绿灯亮,南北路口的红灯亮,东西路口方向通车;3.延时一段时间后,东西路口的绿灯熄灭,黄灯开始延时并且开始闪烁,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车;4.延时一段时间之后,南北路口的绿灯熄灭,黄灯开始延时并且开始闪烁,闪烁3次之后,再切换到东西路口方向;5.当按动单脉冲单元的AN按钮(模拟急救车通过),两个方向交通信号灯全红,延迟10秒以便让急救车通过;急救车通过以后,交通灯恢复正常显示。

二.设备选取(1)pc机(3)单片机仿真机三.程序流程四.实验电路五.程序代码:Flash equ 0 ;LED状态STOP equ 1SY equ P1.0 ;南北黄灯SG equ P1.1 ;南北绿灯SR equ P1.2 ;南北红灯EY equ P1.3 ;东西黄灯EG equ P1.4 ;东西绿灯ER equ P1.5 ;东西红灯org 0ljmp Startorg 3setb STOP ;南北、东西均红灯retiStart:mov SP,#70mov TCON,#01h ;下降沿, IT0mov IE,#81h ;EA允许, EX0clr SR ;南北、东西均红灯setb SYsetb SGclr ERsetb EYsetb EGclr STOPLoop:jb STOP,AllRedclr SR ;南北红灯,东西绿灯 setb SYsetb SGsetb ERsetb EYclr EGmov a,#20call Delayjb STOP,AllRedclr SR ;南北红灯, 东西黄灯闪 setb SYsetb SGsetb EYsetb EGclr Flashmov r7,#9Loop1:mov c,Flashmov EY,cmov a,#1call Delaycpl Flashdjnz r7,Loop1jb STOP,AllRedsetb SR ;南北绿灯,东西红灯 setb SYclr SGclr ERsetb EYsetb EGmov a,#20call Delayjb STOP,AllRedsetb SR ;东西红灯,南北黄灯闪 setb SYclr ERsetb EYsetb EGclr Flashmov r7,#9Loop2:mov c,Flashmov SY,cmov a,#1call Delaycpl Flashdjnz r7,Loop2ljmp LoopAllRed: ;两个方向交通信号灯全红 clr SRsetb SYsetb SGclr ERsetb EYsetb EGclr STOPmov a,#10call Delayljmp LoopDelay: ;延时子程序mov r1,#80Hmov r0,#0DelayLoop:jb STOP,ExitDelaydjnz r0,DelayLoopdjnz r1,DelayLoopdjnz ACC,DelayExitDelay:retend四.结论通过这个设计,我对单片机有了更深的体会。

交通灯设计-8255,8254(附连线图和源代码)

交通灯设计-8255,8254(附连线图和源代码)

西安郵電學院硬件课程设计报告题目:微机原理与接口课程设计院系名称:计算机学院专业名称:软件工程班级:软件0802学生姓名:***学号(8位):********指导教师:**设计起止时间:2011年05月23日~2011年05月27日一、设计目的通过可编程并行接口芯片8255A和可编程定时器/计数器芯片8253/8254以及中断控制器 8259实现十字路口交通灯的模拟控制,进一步掌握并行接口和定时器/计数器及数码管控制的实际应用。

二、设计内容1.用试验台提供的发光二极管(红绿黄各两支,共六支)作为南北路口(红绿黄各一支)和东西路口(红绿黄各一支)的模拟交通灯。

2.用可编程并行接口芯片8255A控制模拟交通灯的亮与灭和数码管的倒计时显示。

3.用可编程定时器/计数器芯片8253实现模拟交通灯亮与灭的时间延迟控制。

4.用数码管作为模拟交通灯亮与灭的时间延迟控制的倒计时显示。

5.用汇编语言编程使六个灯按交通灯变化规律“亮/灭”。

交通灯变化规律要求:① 南北路口的绿灯,东西路口的红灯同时亮30秒,且数码管30秒倒计时显示。

② 南北路口的黄灯闪烁3秒(三亮三灭),同时东西路口的红灯继续亮,且数码管3秒倒计时显示。

③ 南北路口的红灯,东西路口的绿灯同时亮20秒,且数码管20秒倒计时显示。

④ 南北路口的红灯继续亮,同时东西路口的黄灯闪烁3秒(三亮三灭),且数码管3秒倒计时显示。

⑤ 转①重复⑥按压“东西紧急键”,则东西方向绿灯,南北方向红灯;再次按压“东西紧急键”,解除东西紧急通行状态。

(“东西紧急键”可是键盘键,亦可是逻辑开关键)⑦按压“南北紧急键”,则南北方向绿灯,东西方向红灯;再次按压“南北紧急键”,解除南北紧急通行状态。

(“南北紧急键”可是键盘键,亦可是逻辑开关键)⑧按<ESC>键退出程序。

备注:1、按键用8255A 芯片的PC 口实现或用键盘模拟实现。

2、8253定时到可以通过8259,用中断的方式实现定时器。

实验二:外部中断(急救车与交通灯)

实验二:外部中断(急救车与交通灯)

实验二:外部中断(急救车与交通灯)一、实验目的1.继续熟悉编程调式工具和软件延时的使用。

2.学习外部中断技术的基本使用方法。

3.学习中断处理程序的编程方法。

二、实验内容利用实验板的原理图,用软件延时实现交通信号灯的自动管理。

实际交通灯的变化情况和规律:假设一个十字路口为东南西北走向。

初始状态0为东西南北都红灯亮。

然后转状态1东西绿灯通车,南北红灯亮。

过一段时间后,转状态2,东西绿灯闪烁5次后灭,黄灯亮,南北还是红灯。

再转状态3,南北绿灯通车,东西红灯亮。

过一段时间后转状态4,南北绿灯闪烁5次后灭,黄灯亮,东西还是为红灯亮,一段时间后,又循环至状态1。

在上面实验内容的基础上增加允许急救车优先通过的要求。

有急救车到达时,两个方向交通信号灯全部为红灯亮,禁止其它车辆通行,以便让急救车通过。

设急救车通过路口时间为10秒,当急救车通过后,交通灯恢复中断前状态。

本实验用按键申请中断,表示有急救车通过。

编程实现交通灯的自动管理以及中断方式下的交通信号灯的自动管理,要求在给出的程序流程框图的基础上编程实现。

中断信号的产生由K2的接通与断开来实现,K2与单片机的P3.3连接。

实验过程中需要时,按一下K2即可。

三、实验电路图四、实验说明1.编制中断处理程序要注意的问题是:保护进入中断时的状态(保护现场),并在退出中断之前恢复进入时的状态(恢复现场)。

2.必须在中断服务程序中设定是否允许中断重入,即设置EX1位。

3.本例中使用了INT1中断,下降沿触发,避免按键一次触发多个中断。

一般中断处理程序进入时应保护PSW ,ACC 以及中断处理程序中需要使用的寄存器。

本例的INT1程序中应保护PSW ,ACC ,B 等,以便保护中断前红绿灯的状态(保护现场),并且在退出前恢复原来红绿灯状态(恢复现场)。

INT1端接单次脉冲发生器。

五、参考程序框图INT0中断处理六、参考程序org 0000LJMP STARTORG 0013HLJMP INTEX1 ;外中断1中断程序入口START: LCALL state0lcall delay2ssetb IT1setb EAsetb EX1sloop: Lcall state1Lcall state2Lcall state3Lcall state4LJMP sloopstate0: mov P1,#0f6h ;11110110,南北方向红灯亮,东西方向红灯亮lcall delay2s ;延时2sretstate1: mov P1,#0f3h ;11110011,东西绿灯亮,南北红灯亮MOV B,#0F3H ;保存p1状态acall delay60s ;延时60sretstate2: mov r0,#05 ;东西绿灯闪烁5次后灭,东西黄灯亮,南北红灯亮s21: mov P1,#0f3h ;11110011,东西绿灯亮,南北红灯亮MOV B,#0F3H ;保存p1状态acall delay2s ;延时2smov P1,#0f7h ; 11110111,东西绿灯灭,南北红灯亮MOV B,#0F7H ;保存p1状态acall delay2s ;延时2sdjnz r0,s21 ;东西绿灯闪烁5次mov P1,#0f5h ;11110101,东西黄灯亮,南北红灯亮MOV B,#0F5H ;保存p1状态acall delay20sretstate3: mov P1,#0DEh ;11011110,东西红灯亮,南北绿灯亮MOV B,#0DEH ;保存p1状态acall delay60s ; ;延时60sretstate4: mov r0,#05 ;南北绿灯闪烁5次后灭,东西红灯亮,南北黄灯亮s41: mov P1,#0DEh ;11011110,东西红灯亮,南北绿灯亮MOV B,#0DEH ;保存p1状态acall delay2s ;延时2smov P1,#0fEh ;11111110,东西红灯亮,南北绿灯灭MOV B,#0FEH ;保存p1状态acall delay2s ;延时2sdjnz r0,s41 ;南北绿灯闪烁5次mov P1,#0EEh ;11101110,东西红灯亮,南北黄灯亮MOV B,#0FEH ;保存p1状态acall delay20s ;延时20sretdelay2s: MOV R1,#200 ;延时L2: MOV R2,#20L1: MOV R3,#248L3: DJNZ R3,L3DJNZ R2,L1DJNZ R1,L2RETDelay20s:mov r7,#10 ;延时D20s1: acall delay2sdjnz r7,D20s1retdelay60s: mov r7,#30 ;延时d60s1: acall delay2sdjnz r7,d60s1ret;外部中断1服务程序INTEX1: clr EX1 ;关外部中断1push PSW ;中断现场保护push Accpush bsetb EX1 ;外部中断1允许clr p2.5 ;蜂鸣器响lcall state0 ;东西南北向红灯亮mov R6,#3 ;延时12sINTEX1_1:lcall delay2ssetb p2.5 ;蜂鸣器停lcall delay2sclr p2.5 ;蜂鸣器响djnz R6,INTEX1_1setb p2.5clr ex1 ;关外部中断1pop bmov p1,bpop acc ;恢复中断现场pop PSWsetb ex1 ;外部中断1允许RETIend七、实验报告1、说明实验目的和内容。

51单片机交通灯(加急救车)

51单片机交通灯(加急救车)

51单片机控制交通灯一、实现功能:1、先南北红灯亮,东西绿灯亮。

南北红灯亮维持25秒,在南北红灯亮的同时东西绿灯也亮,并维持20秒;到20秒时,东西绿灯闪亮,闪亮3秒后熄灭。

在东西绿灯熄灭时,东西黄灯亮,并维持2秒。

到2秒时,东西黄灯熄灭,东西红灯亮,同时,南北红灯熄灭,绿灯亮,东西红灯亮维持30秒。

南北绿灯亮维持25秒,然后闪亮3秒后熄灭。

同时南北黄灯亮,维持2秒后熄灭,这时南北红灯亮,东西绿灯亮。

周而复始。

2、用一个按键模拟急救车到达。

急救车到达路口时,四个方向的红灯全亮,10秒钟后恢复正常显示。

3、一辆急救车正在过路口时(即四个方向全红灯10秒倒计时未结束),又来了一辆急救车,重新从10秒开始倒计时。

4、急救车过去之后(即10秒倒计时结束),路灯状态要继续急救车到达之前的状态往下运行。

5、数码管显示绿灯变红灯、红灯变绿灯以及急救车10秒钟的倒计时。

6、急救车从路口过的时候,蜂鸣器响1s停1s的循环报警。

二、proteus仿真电路图注:此图仅作为仿真使用。

实际焊接电路时,由于单片机的驱动能力较弱,所以数码管的位选、LED的控制最好加上三极管进行电流放大,否则即使能实现功能,但是LED和数码管的发光的亮度也不强。

三、C语言程序程序#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define duan P0#define wei P2code uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; uchar buff[8] = {10,10,10,10,10,10,10,10};uchar weizhi = 0;uchar alarm = 0;uchar bk_TH1 = 0;uchar bk_TL1 = 0;uchar bk_cnt = 0;uchar bk_cnt_time = 0;uchar cnt_time = 0;uchar cnt = 0;uchar cnt_flash = 0;bit cnt_finish = 0;bit LED = 0;bit beef_flag = 1;sbit Er = P1^0; //东西—红灯sbit Eg = P1^1; //东西—绿灯sbit Ey = P1^2; //东西—黄灯sbit Sr = P1^3; //南北—红灯sbit Sg = P1^4; //南北—绿灯sbit Sy = P1^5; //南北—黄灯sbit beef = P1^6; //蜂鸣器void display(void);void main(void){uchar time = 0;TMOD |= 0x11;TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;ET1 = 1;ET0 = 1;INT0 = 1;EX0 = 1;IP |= 0x02;EA = 1;TR0 = 1;TR1 = 1;Sr = 0;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 0;beef = 0;buff[0] = 11;buff[1] = 11;buff[2] = 11;buff[3] = 11;buff[4] = 11;buff[5] = 11;buff[6] = 10;buff[7] = 10;while(1){while((cnt<20)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 1;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<23)&&(alarm == 0)){Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = LED;Ey = 0;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<25)&&(alarm == 0)) {Sr = 1;Sg = 0;Sy = 0;Er = 0;Eg = 0;Ey = 1;time = (25-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<50)&&(alarm == 0)) {Sr = 0;Sg = 1;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt<53)&&(alarm == 0)) {Sr = 0;Sg = LED;Sy = 0;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}while((cnt_finish != 1)&&(alarm == 0)){Sr = 0;Sg = 0;Sy = 1;Er = 1;Eg = 0;Ey = 0;time = (55-cnt);buff[7] = time%10;buff[6] = time/10;}cnt_finish = 0;while(alarm == 1){Er = 1;Eg = 0;Ey = 0;Sr = 1;Sg = 0;Sy = 0;time = (10-cnt);buff[7] = time%10;buff[6] = time/10;if(cnt == 10){TR1 = 0;TH1 = bk_TH1;TL1 = bk_TL1;cnt = bk_cnt;cnt_time = bk_cnt_time;TR1 = 1;alarm = 0;}beef = beef_flag;}beef = 0;}}void int0(void) interrupt 0{TR1 = 0;if(alarm == 0){bk_TH1 = TH1;bk_TL1 = TL1;bk_cnt = cnt;bk_cnt_time = cnt_time;}TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;cnt = 0;cnt_time = 0;alarm = 1;TR1 = 1;}void timer0(void) interrupt 1 {TH0 = (65536-2000)/256;TL0 = (65536-2000)%256;display();}void timer1(void) interrupt 3 {TH1 = (65536-50000)/256;TL1 = (65536-50000)%256;if(++cnt_time == 20){cnt_time = 0;cnt++;beef_flag = ~beef_flag;}if(++cnt_flash == 4){cnt_flash = 0;LED = ~LED;}if(cnt == 55){cnt = 0;cnt_finish = 1;}}void display(void){duan = 0xff;wei = (1<<weizhi);duan = tab[buff[weizhi]];if(++weizhi == 8){weizhi = 0;}}。

外部中断(急救车与交通灯)课设

外部中断(急救车与交通灯)课设

电气工程学院课程设计说明书设计题目:外部中断(急救车与交通灯)系别:工业自动化仪表系年级专业: x学号: x学生姓名: x指导教师: x教师职称:副教授讲师电气工程学院《课程设计》任务书课程名称:单片机原理及应用课程设计基层教学单位:自动化仪表系指导教师:张淑清学号x 学生姓名x (专业)班级x设计题目外部中断(急救车与交通灯)设计技术参数1.独立完成设计任务。

2.编程,上机调试。

3.连接硬件实验线路,实现所要求的功能。

4.完成设计,提交课程设计报告。

设计要求本实验模拟交通信号灯控制,一般情况下正常显示;有急救车到达时,两个方向交通灯信号全红,以便让救护车通过。

设急救车通过路口时间为10秒,急救车通过后,交通恢复正常,本实验用单次脉冲申请外部中断,表示有急救车通过。

参考资料1)《单片机原理及应用技术》张淑清,国防工业出版社(教材);2) 《过程控制系统及仪表》邵裕森巴莜云编(教材)3)《单片机及应用》李大友,高等教育出版社(教材)4)《机械量测量》机械工业出版社(教材)应完成内容绘制硬件电路,软件流程图熟悉伟福单片机编程环境读程序,修改软件参数修改硬件地址,硬件调试撰写课程设计报告指导教师签字基层教学单位主任签字说明:1、此表一式三份,系、学生各一份,报送院教务科一份。

2、学生那份任务书要求装订到课程设计报告前面。

电气工程学院教务科目录第一章摘要 (4)第二章引言 (4)第三章设计原理 (5)3.1 AT89S51单片机 (5)3.1.1 AT89S51单片机简 (5)3.1.2 AT89S51单片机的主要性能参数 (5)3.1.3 AT89S51芯片内部结构简介 (5)3.2交通灯的硬件设计 (6)3.3交通灯的软件设计 (8)第四章课设总结 (15)参考文献 (16)第一章摘要随着大规模集成电路技术和计算机技术的飞速发展,把计算机的运算器和控制器(即CPU)、存储器和多种接口集成在一块芯片上而成的芯片为单片机。

单片机__急救车优先通过交通灯课程设计

单片机__急救车优先通过交通灯课程设计

单片机__急救车优先通过交通灯课程设计专业班级:10级自动化(3)班姓名:周玉玲李旭王志繁胡浩远学号:080310167 08 0310160080310133 1 00210049指导老师:刘娟设计时刻:2012年12月21日物理与电气工程学院二零一二年十二月二十一日内容摘要请设计一个交通灯操纵电路,同时编写相应的软件,完成交通灯的治理任务。

1、按照交通灯操纵变化规律。

假设一个十字路口为东西南北走向。

初始状态0为东西红灯,南北红灯。

然后转状态1南北绿灯通车,东西红灯。

过1 5秒钟转状态2,南北绿灯转亮黄灯闪耀,延时几秒,东西仍旧红灯。

再转状态3,东西绿灯通车,南北红灯。

过15秒钟转状态4,东西绿灯转亮黄灯闪耀,延时几秒,南北仍旧红灯。

最后循环至状态1。

2、以按键为中断申请,表示有急救车通过,所有的交通信号灯全红10秒钟。

交通灯操纵系统,可由多种电路来构成,采纳单片机操纵,可提升电路的可靠性与稳固性,硬件电路比较简单,要紧用软件来操纵,操纵方式灵活多样,能满足不同情形的操纵,可利用中断等方式通过程序来方便的实现调时。

关键字:课程设计单片机急救车流程图状态代码名目一、课程设计意义和要求 (3)1、课程设计意义 (3)2、课程设计要求 (3)二、理论设计 (4)1、总体设计 (4)2、软件设计 (4)2.1、电路原理逻辑图 (7)2.2、程序流程图 (8)硬件设计描述 (9)1、系统方框图 (9)2、电路原理图 (10)3、单片机简介 (11)4、单片机的学习 (12)5、单片机的应用领域 (1)3四、调试与仿真 (15)五、心得体会 (18)六、参考文献 (20)附录源程序代码 (21)急救车优先的交通灯操纵系统设计一、课程设计意义和要求:1、课程设计意义大学本科学生动手能力的培养和提升是大学本科教育的一个重要内容,《单片机原理及应用》是一门应用性较强的课程。

如何让学生在学好基础知识的同时,迅速把握应用技术,实验与课程设计环节起着专门重要的作用。

简易交通灯报告(附源程序——汇编语言)

简易交通灯报告(附源程序——汇编语言)

题目:简易交通灯一、设计目的利用TDN微机原理试验箱及单元电路,实现对一道路交通灯的控制。

当通过车辆计数达到50时,绿灯灭,红灯亮,同时数码块倒计时若干秒(此次设计中设为9秒)。

此时,车辆停止,行人可以通过。

二、参加人员及分工李——试验报告霍——调试程序洪——编写程序三、技术要求1、设计完成交通灯的电路2、采用TDN试验箱上的8255、8259、8253完成3、程序设计中采用软件延时四、试验器材TDN-MD86/51实验箱一台,8253一片,8255一片,8259一片,数码管一组,发光二极管一组。

五、设计和调试环境TDN-MD86/51教学试验系统六、题目分析、工作原理、设计思想题目分析我们所做的交通灯是控制单路口处车辆和行人的通过及停止的简易交通灯。

因此需要两个灯和一块用于显示倒计时的数码块来控制车辆和行人的通行、停留问题。

其中两个灯分为红绿色,主要根据两只灯的亮灭情况来控制车辆,当红灯灭绿灯亮的时候车辆可以通过,而红灯亮绿灯灭时车辆就要停止通行。

数码块用于显示倒计时的时间以控制人,当倒计时开始时人通行,倒计时结束后行人就要等待。

根据题目分析得出以下设计思想及工作原理:设计思想在一开始启动交通灯时设置为红灯灭绿灯亮,让车辆先通行,行人等待,当通过50辆车后,红绿灯都同时灭然后红灯亮绿灯灭且数码快开始倒计时,此时为行人通行时间。

然后当数码块倒计时到0时行人通行的时间结束。

转而红灯灭绿灯亮又改为车辆通行时间。

红绿灯和数码块如此反复工作就构成的交通灯。

工作原理通过向8259写入程序来控制其他器件的工作。

在程序一开始写入中断向量和各芯片的控制方式字,以确保发生中断是正确的响应中断及芯片正确的工作状态。

接下来的程序就是控制8255和8253,8255选择工作方式1,A、B、C、口都做基本的输入输出。

通过8255A 口先让红灯灭绿灯亮。

8253选择工作方式2:计数停止中断,通过8253对车辆的计数达到50辆车是就发出中断请求。

单片机实验二实验报告

单片机实验二实验报告

题目实验5 中断实验一、实验目的:1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

二、实验设备:CPU挂箱、8031CPU模块三、实验内容:在交通灯控制实验的内容的基础上增加允许急救车优先通过的要求。

当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。

本实验以单脉冲为中断申请,表示有急救车通过。

四、实验步骤:1、打开CPU挂箱,正确安装8031CPU模块,指导显示屏上显示“199502”字样2、74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。

单脉冲输出端P-接CPU板上的INT0。

3、打开软件,选择相应的COM口和波特率,电脑与CPU挂箱正确连接上后,软件窗口的下端会显示已连接上,相应的CPU挂箱显示屏上会显示“C ”字样。

4、在软件上选择新建,新建文件类型为ASM51,新建好后,编写程序。

5、程序编写好后,选择保存,然后进行编译,调试,运行程序。

6、观察CPU挂箱上硬件的运行是否与设计的一样,否则进行相应的修改和调试。

五、注意事项:1、应保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。

要保护的地方,有累加器ACC、标志寄存器PSW,还有需要保护的工作寄存器。

2、主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。

3、主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。

因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。

六、汇编程序:T5.ASMNAME T5 ;中断控制实验OUTPORT EQU 0CFB0H ;端口地址SAVE EQU 55H ;save保存从端口cfa0输出的数据CSEG AT 0000H ;程序入口地址LJMP START ;跳转到程序开始CSEG AT 4003H ;中断入口地址LJMP INT ;无条件跳转到中断服务程序CSEG AT 4100HSTART: SETB IT0 ;IT0置1,外部中断0的触发方式为下降沿触发 SETB EX0 ;EX0置1,打开外部中断0,允许外部中断0中断 SETB EA ;EA置1,打开中断允许总控制位,开放中断MOV A,#11H ;置首显示码MOV SAVE,A ;保存ACALL DISP ; 调用子程序DISP,显示输出ACALL DE3S ;延时3秒LLL: MOV A,#12H ;东西路口绿灯亮,南北路口红灯亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE10S ;延时10秒MOV A,#10H ;东西路口绿灯灭MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPMOV R2,#05H ;东西路口黄灯闪烁5次TTT: MOV A,#14H ;东西路口黄灯亮,南北路口红灯亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒MOV A,#10H ;东西路口黄灯灯灭MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时2秒DJNZ R2,TTT ;循环5次,东西路口黄灯闪烁5次MOV A,#11H ;红灯全亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒MOV A,#21H ;东西路口红灯亮,南北路口绿灯亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE10S ;延时10秒MOV A,#01H ;南北路口绿灯灭MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPMOV R2,#05H ;南北路口黄灯闪烁5次GGG: MOV A,#41H ;南北路口黄灯亮,东西路口红灯亮 MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒MOV A,#01H ;南北路口黄灯灭,东西路口红灯亮 MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒DJNZ R2,GGG ;南北路口黄灯闪烁5次MOV A,#11H ;红灯全亮MOV SAVE,A ;保存A中的值ACALL DISP ;调用子程序DISPACALL DE02S ;延时0.2秒JMP LLL ;转LLL循环DE10S: MOV R5,#100 ;延时10秒JMP DE1 ;跳到DE1DE3S: MOV R5,#30 ;延时3秒JMP DE1 ;跳转到DE1DE02S: MOV R5,#02 ;延时0.2秒DE1: MOV R6,#200 ;置R6的初值DE2: MOV R7,#126 ;置R7的初值DE3: DJNZ R7,DE3 ;由R7的初值,循环126次DJNZ R6,DE2 ;由R6的初值,循环200次DJNZ R5,DE1 ;由R5的初值,循环2次RET ;中断返回INT: CLR EA ;EA清零,关闭中断PUSH ACC ;中断处理PUSH PSW ;入栈MOV A,R5 ;入栈PUSH ACC ;入栈MOV A,#11H ;红灯全亮,绿、黄灯全灭ACALL DISP ;调用子程序DISPDEL10S: MOV R3,#100 ;延时10秒DEL1: MOV R2,#200 ;R2置初值DEL2: MOV R5,#126 ;R5置初值DEL3: DJNZ R5,DEL3 ;由R5的值,循环126次DJNZ R2,DEL2 ;由R2的值,循环200次DJNZ R3,DEL1 ;由R3的值,循环100次MOV A,SAVE ;取SAVE中保存数据输出到cfa0端口 ACALL DISP ;调用子程序DISPPOP ACC ;出栈MOV R5,A ;出栈POP PSW ;出栈POP ACC ;出栈SETB EA ;允许外部中断RETI ;中断返回DISP: MOV DPTR,#OUTPORT ;输出程序CPL A ;累加器A中的值取反MOVX @DPTR,ARET ; 子程序调用返回END ;程序结束。

实验5 外部中断(急救车与交通灯)-新

实验5 外部中断(急救车与交通灯)-新

实验五外部中断实验(急救车与交通灯)一、实验要求本实验模拟交通信号灯控制,一般情况下正常显示,灯亮的顺序如下所示:初始状态:东西、南北红灯亮3秒10秒南北黄灯亮、东西红灯亮2秒2秒南北红灯亮、东西绿灯亮10当有急救车到达时,两个方向交通信号灯全红,以便让急救车通过。

设急救车通过路口时间为10秒,急救车通过后,交通恢复正常,本实验用单次脉冲申请外部中断,表示有急救车通过。

二、实验目的1、学习外部中断技术的基本使用方法。

2、学习定时器定时的基本方法。

3、学习中断处理程序的编程方法。

三、实验电路图四、实验说明1、T0选择软件启动,选用方式1,定时时间为100ms,然后10秒、2秒、3秒时间分别由定时100次、20次和30次来实现由定时器T0来实现。

2、中断服务程序的关键是:(1)保护进入中断时的状态,并在退出中断之前恢复进入时的状态。

(2)必须在中断程序中设定是否允许中断重入,即设置EX0位。

本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC,以及中断程序使用但非其专用的寄存器。

本例的中断程序保护了TH0、TL0并且在退出之前恢复了这三个寄存器。

另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。

本例没有涉及到这种情况。

对于80C51CPU外部中断由INT0(P3.2)端接入。

中断信号由单次脉冲发生器产生。

五、参考程序:1、有急救车到达时,两个方向交通信号灯全红情况ORG 0000HLJMP MAIN1ORG 0003HLJMP WBZD0ORG 0030HMAIN1:MOV SP,#60HSETB IT0MOV IP,#00000001BMOV IE,#10000001BMOV B,#30MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#10010000BMOV P1,ASETB TR0L1:JBC TF0,L2AJMP L1L2:MOV TH0,#3CHMOV TL0,#0B0HDJNZ B,L1CLR TR0MAIN2:MOV R0,#100MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#00110000BMOV P1,ASETB TR0L3:JBC TF0,L4AJMP L3L4:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R0,L3CLR TR0MAIN3:MOV R1,#20MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#01010000BMOV P1,ASETB TR0L5:JBC TF0,L6AJMP L5L6:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R1,L5CLR TR0MAIN4:MOV R2,#100MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#10000100BMOV P1,ASETB TR0L7:JBC TF0,L8AJMP L7L8:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R2,L7CLR TR0MAIN5:MOV R3,#20MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#10001000BMOV P1,ASETB TR0L9:JBC TF0,L10AJMP L9L10:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R3,L9CLR TR0LJMP MAIN2HERE:SJMP HERE中断服务子程序:WBZD0: PUSH TH0PUSH TL0PUSH APUSH P1MOV A,#10010000BMOV P1,AMOV R4,#100DY1:MOV R5,#100DY2:MOV R6,#100DY3:NOPNOPNOPDJNZ R6,DY3DJNZ R5,DY2DJNZ R4,DY1POP P1POP APOP TL0POP TH0RETI2、没有急救车到达时,两个方向交通信号灯按交通规则工作ORG 0000HLJMP MAIN1ORG 0030HMAIN1:MOV SP,#60HMOV B,#30MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#10010000BMOV P1,ASETB TR0L1:JBC TF0,L2AJMP L1L2:MOV TH0,#3CHMOV TL0,#0B0HDJNZ B,L1CLR TR0MAIN2:MOV R0,#100MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#00110000BMOV P1,ASETB TR0L3:JBC TF0,L4AJMP L3L4:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R0,L3CLR TR0MAIN3:MOV R1,#20MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#01010000BMOV P1,ASETB TR0L5:JBC TF0,L6AJMP L5L6:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R1,L5CLR TR0MAIN4:MOV R2,#100MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#10000100BMOV P1,ASETB TR0L7:JBC TF0,L8AJMP L7L8:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R2,L7CLR TR0MAIN5:MOV R3,#20MOV TMOD,#01HMOV TH0,#3CHMOV TL0,#0B0HMOV A,#10001000BMOV P1,ASETB TR0L9:JBC TF0,L10AJMP L9L10:MOV TH0,#3CHMOV TL0,#0B0HDJNZ R3,L9CLR TR0LJMP MAIN2 HERE:SJMP HERE。

“急救车与交通灯”实验报告

“急救车与交通灯”实验报告

实验3.3.2 定时/计数器实验扩展——急救车与交通灯一、实验目的1、进一不了解单片机的定时/计数器工作方式;2、了解并掌握单片机的中断原理和应用。

二、实验内容完成交通灯基本功能基础上,当有急救车到达时,两向交通信号为全红,以便让急救车通过。

假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。

本实验以按键为中断申请,表示急救车通过。

三、实验环境PC机一台、Proteus仿真软件、KEIL uVision2软件一套。

四、实验电路原理图说明:SW1与+5V接通时交通灯开始工作,SW1与“地”接通时交通灯灭,当交通灯工作时按下BUTTON表示有急救车通过。

五、实验程序流程图主程序INT_1急救车中断程序T0_Delay定时中断程序INT_0交通灯熄灭中断程序六、实验程序清单ORG 0000HAJMP 0100HORG 0003HAJMP INT_0ORG 000BHAJMP T0_DELAYORG 0013HAJMP INT_1ORG 0100HMAIN:MOV A,#80HMOV DPTR,#7300HMOVX @DPTR,AMOV A,#00HMOV DPTR,#7100HSTART:MOV A,P1ANL A,#01HJZ STARTMOV SP,#60HSETB EASETB EX0SETB EX1SETB IT0SETB IT1MOV DPTR,#7100HAGAIN:MOV A,#14HMOVX @DPTR,ACALL DELAY2SCALL DELAY2SMOV A,#12HMOVX @DPTR,ACALL DELAY2SMOV A,#41HMOVX @DPTR,ACALL DELAY2SCALL DELAY2SMOV A,#21HMOVX @DPTR,ACALL DELAY2SJMP AGAININT_1:CLR EX1PUSH 30HPUSH 31HPUSH 32HPUSH ACCMOV A,#11HMOV TMOD,#01HMOV TL0,#0B0HMOV TH0,#3CHMOV A,#200SETB PT0SETB ET0SETB TR0CJNE A,#0,$CLR TR0CLR ET0CLR PT0POP ACCMOV DPTR,#7100HMOVX @DPTR,APOP32HPOP31HPOP30HSETB EX1RETIT0_DELA Y:CLR TR0MOV TL0,#0B0HMOV TH0,#3CH SETB TR0DEC ARETIINT_0:MOV A,#00HMOV DPTR,#7100HMOVX @DPTR,AAJMP ENDDdelay2s:mov 30H,#15tt0: mov 31H,#0ffhtt1: mov 32H,#0ffhdjnz 32H,$ ;255*2usdjnz 31H,tt1 ;(1+255*2+2)*255djnz 30H,tt0 ;(1+(1+255*2+2)*255+2)*15+1=1962271usmov 30H,#73tt2: mov 31H,#0ffhdjnz 31H,$djnz 30H,tt2 ;(1+2*255+2)*73+1=37450usmov 30H,#138djnz 30H,$ ;138*2=276usnopretENDD: SJMP $end七、实验步骤1、打开Proteus,画好硬件电路图并保存;2、打开KEIL uVision2,建立工程并按程序清单编写好源程序,编译连接;3、将Proteus和KEIL uVision2连接调试,验证电路和程序的功能。

单片机原理与应用实验指导书(含参考程序)

单片机原理与应用实验指导书(含参考程序)

单片机实验实验说明:实验一和二做一次实验三和四做一次实验五和六分别做一次实验一 P1口实验一一、实验目的:1.学习P1口的使用方法。

2.学习延时子程序的编写和使用。

二、实验设备:EL-MUT-II型实验箱,8051CPU板三、实验内容:1.P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮。

2.P1口做输入口,接八个按纽开关,以实验箱上74LS273做输出口,编写程序读取开关状态,在发光二极管上显示出来。

四、实验原理:P1口为准双向口,P1口的每一位都能独立地定义为输入位或输出位。

作为输入位时,必须向锁存器相应位写入“1”,该位才能作为输入。

8031中所有口锁存器在复位时均置为“1”,如果后来在口锁存器写过“0”,在需要时应写入一个“1”,使它成为一个输入。

可以用第二个实验做一下实验。

先按要求编好程序并调试成功后,可将P1口锁存器中置“0”,此时将P1做输入口,会有什么结果。

再来看一下延时程序的实现。

现常用的有两种方法,一是用定时器中断来实现,一是用指令循环来实现。

在系统时间允许的情况下可以采用后一种方法。

本实验系统晶振为6.144MHZ,则一个机器周期为12÷6.144us即1÷0.512us。

现要写一个延时0.1s的程序,可大致写出如下:MOV R7,#X (1)DEL1:MOV R6,#200 (2)DEL2:DJNZ R6,DEL2 (3)DJNZ R7,DEL1 (4)上面MOV、DJNZ指令均需两个机器周期,所以每执行一条指令需要1÷0.256us,现求出X值:1÷0.256+X(1÷0.256+200×1÷0.256+1÷0.256)=0.1×10⁶指令(1)指令(2)指令(3)指令(4)所需时间所需时间所需时间所需时间X=(0.1××10⁶-1÷0.256)/(1÷0.256+200×1÷0.256+1÷0.256)=127D=7FH经计算得X=127。

试验五外部中断试验急救车与交通灯一

试验五外部中断试验急救车与交通灯一

实验五外部中断实验(急救车与交通灯)一.实验要求在实验四内容的基础上增加允许急救车优先通过的要求。

有急救车到达时,两向交通信号为全红,以便让急救车通过。

假定急救车通过路口时间为10秒,急救车通过后,交通灯恢复中断前状态。

本实验以按键为中断申请,表示有急救车通过。

二.实验目的1.学习外部中断技术的基本使用方法。

2.学习中断处理程序的编程方法。

三.实验电路及连线PO0-PO3接DG1-DG4,PO4-P07接DR1-DR4。

CS273 接8300H。

K8接P3.2。

四.实验说明中断服务程序的关键是:1.保护进入中断时的状态,并在退出中断之前恢复进入时的状态。

2.必须在中断程序中设定是否允许中断重入,即设置EX0位。

本例中使用了INT0中断,一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。

本例的INT0程序保护了PSW,ACC,2等三个寄存器并且在退出前恢复了这三个寄存器。

另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。

本例中没有涉及这种情况。

实验开始时K8应在H(高电平)端,要产生中断时先拨向L(低电平)端再拨回H端。

五.实验程序框图六.源程序ORG 0000HLJMP STARTORG 0003H ;INT 0 中断入口地址LJMP INT0ORG 0040HSTART:MOV SP,#60HSETB EX0 ;INT 0 中断有效SETB IT0SETB EALCALL STATUS0 ;初始状态(都是红灯) CIRCLE: LCALL STATUS1 ;南北绿灯,东西红灯LCALL STATUS2 ;南北绿灯闪转黄灯,东西红灯LCALL STATUS3 ;南北红灯,东西绿灯LCALL STATUS4 ;南北红灯,东西绿灯闪转黄灯LJMP CIRCLEPUSH PSW ;保护现场PUSH 2PUSH ACCMOV DPTR,#8300HMOV A,#0FH ;南北,东西都亮红灯MOVX @DPTR,AMOV R2,#100 ;延时10秒LCALL DELAYPOP ACC ;恢复现场MOVX @DPTR,APOP 2POP PSWRETISTATUS0: ;南北红灯,东西红灯MOV DPTR,#8300HMOV A,#0FHMOVX @DPTR,AMOV R2,#10 ;延时1秒LCALL DELAYRETSTATUS1: ;南北绿灯,东西红灯MOV DPTR,#8300HMOV A,#5AH ;南北绿灯,东西红灯MOVX @DPTR,AMOV R2,#50 ;延时5秒LCALL DELAYRETSTATUS2: ;南北绿灯闪转黄灯,东西红灯MOV DPTR,#8300HMOV R3,#03H ;绿灯闪3次FLASH: MOV A,#5FHMOVX @DPTR,AMOV R2,#03HLCALL DELAYMOV A,#5AHMOVX @DPTR,AMOV R2,#03HLCALL DELAYDJNZ R3,FLASHMOV A,#0AH ;南北黄灯,东西红灯MOVX @DPTR,AMOV R2,#10 ;延时1秒LCALL DELAYSTATUS3: ;南北红灯,东西绿灯MOV DPTR,#8300HMOV A,#0A5HMOVX @DPTR,AMOV R2,#50 ;延时5秒LCALL DELAYRETSTATUS4: ;南北红灯,东西绿灯闪转黄灯MOV DPTR,#8300HMOV R3,#03H ;绿灯闪3次FLASH1: MOV A,#0AFHMOVX @DPTR,AMOV R2,#03HLCALL DELAYMOV A,#0A5HMOVX @DPTR,AMOV R2,#03HLCALL DELAYDJNZ R3,FLASH1MOV A,#05H ;南北红灯,东西黄灯MOVX @DPTR,AMOV R2,#10 ;延时1秒LCALL DELAYNOPRETDELAY: ;延时子程序PUSH 2PUSH 1PUSH 0DELAY1: MOV 1,#00HDELAY2: MOV 0,#0B2HDJNZ 0,$DJNZ 1,DELAY2 ;延时 100 mSDJNZ 2,DELAY1POP 0POP 1POP 2RETEND实验六定时器实验一.实验要求由8031内部定时器1,按方式1工作,即作为16位定时器使用每0.05秒钟T1溢出中断一次。

单片机急救车优先通过交通灯课程设计

单片机急救车优先通过交通灯课程设计

单片机急救车优先通过交通灯课程设计专业班级:10级自动化(3)班姓名:周玉玲李旭王志繁胡浩远学号:080310167 080310160 080310133 100210049指导老师:刘娟设计时刻:2020年12月21日物理与电气工程学院二零一二年十二月二十一日内容摘要请设计一个交通灯操纵电路,同时编写相应的软件,完成交通灯的治理任务。

1、依照交通灯操纵变化规律。

假设一个十字路口为东西南北走向。

初始状态0为东西红灯,南北红灯。

然后转状态1南北绿灯通车,东西红灯。

过15秒钟转状态2,南北绿灯转亮黄灯闪耀,延时几秒,东西仍旧红灯。

再转状态3,东西绿灯通车,南北红灯。

过15秒钟转状态4,东西绿灯转亮黄灯闪耀,延时几秒,南北仍旧红灯。

最后循环至状态1。

2、以按键为中断申请,表示有急救车通过,所有的交通信号灯全红10秒钟。

交通灯操纵系统,可由多种电路来构成,采纳单片机操纵,可提高电路的可靠性与稳固性,硬件电路比较简单,要紧用软件来操纵,操纵方式灵活多样,能满足不同情形的操纵,可利用中断等方式通过程序来方便的实现调时。

关键字:课程设计单片机急救车流程图状态代码名目一、课程设计意义和要求 (3)1、课程设计意义 (3)2、课程设计要求 (3)二、理论设计 (4)1、总体设计 (4)2、软件设计 (4)2.1、电路原理逻辑图 (7)2.2、程序流程图 (8)三、硬件设计描述 (9)1、系统方框图 (9)2、电路原理图 (10)3、单片机简介 (11)4、单片机的学习 (12)5、单片机的应用领域 (13)四、调试与仿真 (15)五、心得体会 (18)六、参考文献 (20)附录源程序代码 (21)急救车优先的交通灯操纵系统设计一、课程设计意义和要求:1、课程设计意义大学本科学生动手能力的培养和提高是大学本科教育的一个重要内容,《单片机原理及应用》是一门应用性较强的课程。

如何让学生在学好基础知识的同时,迅速把握应用技术,实验与课程设计环节起着专门重要的作用。

中断实验-有急救车的交通灯控制实验

中断实验-有急救车的交通灯控制实验

中断实验-有急救车的交通灯控制实验一、实验目的:1、学习外部中断技术的基本使用方法。

2、学习中断处理程序的编程方法。

二、实验设备:EL-8051-III型单片机实验箱三、实验内容:在实验三的内容的基础上增加允许急救车优先通过的要求。

当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为10秒,急救车通过后,交通灯恢复中断前的状态。

本实验以单脉冲为中断申请,表示有急救车通过。

四、实验原理:交通灯的燃灭规律见实验三。

本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。

要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意:一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验给出的程序中,主程序延时用的是R5、R6、R7,中断延时用的是R3、R4和新的R5。

第二,主程序中每执行一步经74LS273的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。

因为进入中断程序后也要执行往74LS273端口输出数据的操作,中断返回时如果没有恢复中断前74LS273端口锁存器的数据,则显示往往出错,回不到中断前的状态。

还要注意一点,主程序中往端口输出数据操作要先保存再输出,例如有如下操作:MOV A,#0F0H (0)MOVX @R1,A (1)MOV SAVE,A (2)程序如果正好执行到(1)时发生中断,则转入中断程序,假设中断程序返回主程序前需要执行一句MOV A,SAVE指令,由于主程序中没有执行(2),故SAVE中的内容实际上是前一次放入的而不是(0)语句中给出的0F0H,显示出错,将(1)、(2)两句顺序颠倒一下则没有问题。

发生中断时两方向的红灯一起亮10秒,然后返回中断前的状态。

五、实验原理图:(同实验三)六、实验步骤:74LS273的输出O0~O7接发光二极管L1~L8,74LS273的片选CS273\接片选信号CS2,此时74LS273的片选地址为CFB0H~CFB7H之间任选。

交通灯设计-8255-8254(附连线图和源代码)doc资料

交通灯设计-8255-8254(附连线图和源代码)doc资料
OUT DX, AL
LED显示数NUM:
MOV BX, OFFSET TABLE1;取八段数码管表的首地址
MOV AL, NUM
XLAT;查表,找出NUM对应的共阴极字形代码
MOV DX, 1461H
OUT DX, AL;将该代码送到B口
打开试验箱电源,进入纯DOS环境运行程序,观察LED数码管显示情况。
数据流程图为:
图4-1流水灯数据流程图
2、用8255与LED KEYBOARD UNIT相连实现八段数码管的静态显示。
实验线路图如下图4-2所示:
图4-2静态显示实验的连线图
共阴极LED数码管字形代码如下表4-2所示:
表4-3共阴极LED数码管字形显示
字形
共阴极字形代码
字形
共阴极字形代码
字形
共阴极字形代码
5Hale Waihona Puke 用汇编语言编程使六个灯按交通灯变化规律“亮/灭”。交通灯变化规律要求:
① 南北路口的绿灯,东西路口的红灯同时亮30秒,且数码管30秒倒计时显示。
② 南北路口的黄灯闪烁3秒(三亮三灭),同时东西路口的红灯继续亮,且数码管3秒倒计时显示。
③ 南北路口的红灯,东西路口的绿灯同时亮20秒,且数码管20秒倒计时显示。
二、设计内容
1.用试验台提供的发光二极管(红绿黄各两支,共六支)作为南北路口(红绿黄各一支)和东西路口(红绿黄各一支)的模拟交通灯。
2.用可编程并行接口芯片8255A控制模拟交通灯的亮与灭和数码管的倒计时显示。
3.用可编程定时器/计数器芯片8253实现模拟交通灯亮与灭的时间延迟控制。
4.用数码管作为模拟交通灯亮与灭的时间延迟控制的倒计时显示。
功能模块图:
图3-1流水灯功能模块

交通灯设计实验报告(硬件原理图+程序)

交通灯设计实验报告(硬件原理图+程序)

交通灯信号灯自动控制系统........................ .................................................................................................................................. '' ILBBF JU⅛ K⅞........................................................................................................................................................ . . ..... ........................................... ' ' .... ........................................................... πl⅛⅛''交通灯原理图系统的基本功能要求IES 4⅛σ⅛G∙rtua-.iM pαvΛ∣ι n?那乌 raafΛia FGI 的*I ⅝WAH ;PmTKITTTCJEI ΛL E πP7ffΛSF7.VΛS IZZ^-O 吃Ml F3.⅜a -E V2ΛM -□ JZAlA-Iii *ZΓ⅛152l ,Z FItJlTZ Plj ∣TB: Pl a E VHJ *i⅛MJPIDfIXI UlT4 MiTrra F□ JfBTT 冲UnsmF3.⅛ΠI PlTlT I 2 3JP ■- -■:⅛ 5EMT-硬件设计1. 系统总体框图2. 电路设计(1)显示模块倒计时与时钟^LC∣W⑴共阴极两位数码管用于倒计时;段选端由锁存器控制,位选端用P3_0与P3_1控制⑵两个四位共阴极数码组成八位数码管用于时钟显示段位选分别由两个锁存器控制(2)红绿灯模块说明:aPESPACKe< T EXT^PESPACKB<IEXT>E DL∈说明: ⑴ 图为两方向的红绿黄灯,分别接在Po 口上,由Po 口控制⑵51系列单片机的P0 口内部没有集成上拉电阻,加上拉就是提高驱动能力,必须要通过上拉电阻接VCC。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五中断系统实验
一、实验目的:
1.学习外部中断的基本使用方法。

2.学习中断处理程序的编程方法。

3.学习模拟交通灯控制的实现方法。

二、实验设备:
微机、KEIL2、Proteus 7.10
三、实验内容:
在完成交通灯亮灭规律的基础上增加允许急救车优先通过的要求。

当有急救车到达时,两个方向上的红灯亮,以便让急救车通过,假定急救车通过路口的时间为5秒,急救车通过后,交通灯恢复中断前的状态。

本实验以单脉冲(下降延有效)为中断申请,表示有急救车通过。

四、实验原理:
1.交通灯的亮灭规律:
要完成本实验,首先必须了解交通路灯的亮灭规律。

本实验需要用到12个发光二极管,即红、黄、绿各4个。

不妨将L1、L2(红)、L3、L4(黄)、L5、L6(绿)做为东西方向的指示灯,将L7、L8(红)、L9、L10(黄)、L11、L12(绿)做为南北方向的指示灯。

而交通灯的亮灭规律为:初始态是两个路口的红灯全亮,之后,东西路口的绿灯亮,南北路口的红灯亮,东西方向通车,延时一段时间后(约10秒),东西路口绿灯灭,黄灯开始闪烁。

闪烁若干次后(约3秒闪烁6次),东西路口红灯亮,而同时南北路口的绿灯亮,南北方向开始通车,延时一段时间后,南北路口的绿灯灭,黄灯开始闪烁。

闪烁若干次后,再切换到东西路口方向,重复上述过程。

2.中断处理
本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。

要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意:一是主程序中的延时程序和中断处理程序中的延时程序最好不要混用,最好主程序延时用R5、R6、R7,中断延时用R2、R3 、R4。

第二,主程序中每执行一步经P1的端口输出数据的操作时,应先将所输出的数据保存到一个单元中。

因为进入中断程序后也要执行往P1端口输出数据的操作,中断返回时如果没有恢复中断前P1端口锁存器的数据,则显示往往出错,回不到中断前的状态。

五、实验步骤:
1.设计电路:P1接发光二极管L1~L12,单脉冲输出端接INT0。

2.编写程序实现有急救车的交通灯控制。

六、实验报告要求:
1.在实验报告中请将实验中所设计电路图、编写的实验程序及程序框图附上。

七、源代码:
ORG 0000H
AJMP START
ORG 0003H
LJMP INT_0
ORG 0030H
START:
MOV SP,#60H
SETB EX0
SETB IT0
SETB EA
MOV 30H,#00H
MOV C,30H
MOV P1,#0F6H
ACALL DELAY LLOOP: MOV P1,#0F3H ACALL DELAY1
SETB P1.0
SETB P1.2
SETB P1.5
SETB P1.4
MOV P1.3,C
MOV A,#011 SHAN:
MOV P1.3,C
ACALL DELAY
SETB P1.1
ACALL DELAY
DEC A
CLR C
SUBB A,#1
JC BBBB
SJMP SHAN BBBB:
MOV P1,#1EH
ACALL DELAY1
SETB P1.1
SETB P1.2
SETB P1.3
SETB P1.5
MOV P1.0,C
MOV A,#011 SHAN2:
MOV P1.0,C
ACALL DELAY
SETB P1.4
ACALL DELAY
DEC A
CLR C
SUBB A,#1
JC CCC
SJMP SHAN2
ACALL DELAY1 CCC:
SJMP LLOOP DELAY1:
MOV 40H,#10 LLLL:
ACALL DELAY
DEC 40H
MOV R2,40H
DJNZ R2,LLLL
RETI
DELAY:
MOV R7,#100
LOOP2: MOV R6,#100 LOOP1: MOV R5, #20 DJNZ R5, $
DJNZ R6,LOOP1
DJNZ R7,LOOP2 RET
SJMP $
INT_0:
PUSH PSW
PUSH 02H
PUSH ACC
MOV P1,#0F6H
ACALL DELAY1
ACALL DELAY1
POP ACC
POP 02H
POP PSW
RETI
END
八、电路原理图:。

相关文档
最新文档