您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 单片机程序+连线1-19
实验一开关量输入输出实验ORG0000HJMPSTARTORG0100HSTART:MOVP1,P0AJMPSTARTEND连线:JP0连JP10,JP1连JP4实验二继电器和蜂鸣器控制输出实验ORG0000HJMPSTARTORG0100HSTART:SETBP1.2;为了准确读取P1.2口的电平JNBP1.2,RELAY;控制继电器开SETBP1.0;关继电器JMPNEXTRELAY:CLRP1.0;开继电器NEXT:SETBP1.3;为了准确读取P1.3口的电平JNBP1.3,BUZZ;蜂鸣器开SETBP1.1;关继电器JMPSTARTBUZZ:CLRP1.1;开蜂鸣器JMPSTARTEND连线:JP1.0+JP1.1接JP6.0+JP6.1JP1.2+JP1.3接JP10实验三步进电机正转实验;该程序是步进开关的控制;步进电机采用4相8拍控制方式;程序较精炼ORG0000HJMPSTARTORG0100HSTART:MOVP1,#1fHACALLDELAYMOVP1,#3fHACALLDELAYMOVP1,#2fHACALLDELAYMOVP1,#6fHACALLDELAYMOVP1,#4fHACALLDELAYMOVP1,#0CfHACALLDELAYMOVP1,#8fHACALLDELAYMOVP1,#9fHACALLDELAYAJMPSTARTDELAY:MOVR6,#5DD1:MOVR5,#0DD2:MOVR7,#0DD3:DJNZR7,DD3DJNZR5,DD2DJNZR6,DD1RETEND连线:JP1.4_1.7接JP6DE4-7步进电机接步进电机接口实验四步进电机正反转实验;该程序是步进开关的控制;步进电机采用4相8拍控制方式;该程序对SETP1作了改进,可以进行正、反转以及步进控制;程序较精炼ORG0000HJMPSTARTORG0100HSTART:MOVDPTR,#TAB1MOVR4,#7;初始表内指针MOVP1,#0;初始角度,0度,停止KEY:SETBP1.2;为了准确读取P1.2口的电平SETBP1.3;为了准确读取P1.3口的电平JNBP1.3,NEG;控制步进电机反转JNBP1.2,POS;控制步进电机正转SJMPKEYPOS:CJNER4,#7,LOOPP;判断是否到头MOVR4,#0;重新赋首值AJMPPPLOOPP:INCR4;赋新值PP:MOVA,R4MOVCA,@A+DPTRMOVP1,AACALLDELAYAJMPKEYNEG:CJNER4,#0,LOOPN;判断是否到头MOVR4,#7;重新赋首值AJMPNNLOOPN:DECR4;赋新值NN:MOVA,R4MOVCA,@A+DPTRMOVP1,AACALLDELAYAJMPKEYDELAY:MOVR6,#5DD1:MOVR5,#0DD2:MOVR7,#0DD3:DJNZR7,DD3DJNZR5,DD2DJNZR6,DD1RETTAB1:DB1fH,3fH,2fH,6fHDB4fH,0CfH,8fH,9fH;控制数据表END连线:JP1接IP6实验五扩展存储器读写实验ORG0000HLJMPSTARTORG0040HSTART:MOVSP,#60HMOVR0,#00HSETBP3.4STR:MOVDPTR,#0000H;置外部RAM读写地址NEXT:MOVA,R0MOVB,AMOVX@DPTR,A;写外部RAMMOVXA,@DPTR;读外部RAMXRLA,B;比较读回的数据JNZERRORMOVA,B;异或后,A中数据以不对,需要从B中重取数据CPLA;状态取反MOVP1,A;数据在P1口输出ACALLDELAYINCR0;数据加1MOVA,DPL;地址是否到IFFFH,CJNEA,#0FFH,DIN1MOVA,DPHCJNEA,#1FH,DIN1JMPSTR;若空间已存满,则从头开始DIN1:INCDPTR;地址加1JMPNEXTERROR:CLRP3.4;测试失败,鸣叫SJMP$DELAY:MOVR6,#5DD1:MOVR5,#0DD2:MOVR7,#0DD3:DJNZR7,DD3DJNZR5,DD2DJNZR6,DD1RETEND实验六LED灯轮换点亮实验ORG0000HLJMPSTARTORG0100HSTART:MOVSP,#60HLD1:MOVA,#0FEHCLRP2.7ROTATE:MOVP0,A;写P0口SETBP2.7NOPCLRP2.7LCALLDELAY;延时RLA;循环左移SJMPROTATEDELAY:MOVR0,#0AH;延时子程序(1秒)DELAY1:MOVR1,#00HDELAY2:MOVR2,#0B2HDJNZR2,$DJNZR1,DELAY2DJNZR0,DELAY1RETEND实验七:交通灯控制实验ORG0000HLJMPMAINORG0100HMAIN:MOVSP,#60HCLRP2.6LCALLSTATUS0;初始状态(都是红灯)CIRCLE:LCALLSTATUS1;南北绿灯,东西红灯LCALLSTATUS2;南北绿灯闪转黄灯,东西红灯LCALLSTATUS3;南北红灯,东西绿灯LCALLSTATUS4;南北红灯,东西绿灯闪转黄灯LJMPCIRCLESTATUS0:;南北红灯,东西红灯MOVP0,#09HSETBP2.6NOPCLRP2.6MOVR2,#10;延时1秒LCALLDELAYRETSTATUS1:;南北绿灯,东西红灯MOVP0,#21HSETBP2.6;74HC573数据锁存NOPCLRP2.6MOVR2,#50;延时5秒LCALLDELAYRETSTATUS2:;南北绿灯闪转黄灯,东西红灯MOVR3,#03H;绿灯闪3次FLASH:MOVP0,#021HSETBP2.6NOPCLRP2.6MOVR2,#03HLCALLDELAYMOVP0,#01HSETBP2.6NOPCLRP2.6MOVR2,#03HLCALLDELAYDJNZR3,FLASHMOVP0,#11H;南北黄灯,东西红灯SETBP2.6NOPCLRP2.6MOVR2,#10;延时1秒LCALLDELAYRETSTATUS3:;南北红灯,东西绿灯MOVP0,#0CHSETBP2.6NOPCLRP2.6MOVR2,#50;延时5秒LCALLDELAYRETSTATUS4:;南北红灯,东西绿灯闪转黄灯MOVR3,#03H;绿灯闪3次FLASH1:MOVP0,#0CHSETBP2.6NOPCLRP2.6MOVR2,#03HLCALLDELAYMOVP0,#08HSETBP2.6NOPCLRP2.6MOVR2,#03HLCALLDELAYDJNZR3,FLASH1MOVP0,#0AHSETBP2.6NOPCLRP2.6MOVR2,#10;延时1秒LCALLDELAYRETDELAY:;延时子程序PUSH2;将R2、R1、R0压入堆栈PUSH1PUSH0DELAY1:MOVR1,#00HDELAY2:MOVR0,#0B2HDJNZR0,$DJNZR1,DELAY2;延时100mSDJNZR2,DELAY1POP0POP1POP2RETEND实验八LED数码管显示实验;系统复位时,显示12345678;显示内容放到主程序中,用50H~57H作为显示缓冲单元,由30H放位控码;ORG0000HAJMPMAINORG0100HMAIN:MOVSP,#60HMOV50H,#01H;设置了显示缓冲单元50H~57HMOV51H,#02H;显示12345678MOV52H,#03HMOV53H,#04HMOV54H,#05HMOV55H,#06HMOV56H,#07HMOV57H,#08HCLRP2.6CLRP2.7HERE:ACALLDISPAJMPHEREDISP:PUSHDPHPUSHDPLPUSHPSWPUSHACCMOVR0,#50H;显示缓冲单元首地址MOV30H,#0FEH;位控码LD0:MOVP0,#0FFH;清位控口,修改SETBP2.7NOPCLRP2.7MOVDPTR,#TABLE;查段码MOVA,@R0MOVCA,@A+DPTRMOVP0,A;送段码SETBP2.6NOPCLRP2.6MOVA,30HMOVP0,A;送位控码SETBP2.7NOPCLRP2.7ACALLDELAYINCR0MOVA,30HJNBACC.7,LD1RLAMOV30H,AAJMPLD0LD1:MOVP0,#00;清段控口,修改SETBP2.6NOPCLRP2.6MOVP0,#0FFH;清位控口,修改SETBP2.7NOPCLRP2.7POPACCPOPPSWPOPDPLPOPDPHRETTABLE:DB3FH,06H,5BH,4FH,66H;01234DB6DH,7DH,07H,7FH,6FH;56789DB77H,7CH,39H,5EH,79H;ABCDEDB71H,00H,76H,38H,40H;F灭HL-DELAY:MOVR1,#02H;延时约1msDEL0:MOVR2,#00HDEL1:DJNZR2,DEL1DJNZR1,DEL0RETEND实验九LED数码管显示与按钮输入;系统复位时,显示HELLO-88,当按下任何时,在最右边LED上显示该键号,原显示内容自动左移;显示程序采用了子程序的结构,有利于独立性,并使用了查表指令;显示内容放到主程序中,用50H~57H作为显示缓冲单元,由30H放位控码;;新键标记位01H,新键38H,新键暂存37H;该程序的关键在于按键处理,处理前先消除新键标记位ORG0000HAJMPMAINORG0100HMAIN:MOVSP,#60HMOV50H,#11H;设置了显示缓冲单元50H~57HMOV51H,#0EH;显示HELLO-88MOV52H,#12HMOV53H,#12HMOV54H,#00HMOV55H,#13HMOV56H,#08HMOV57H,#08HCLRP2.6CLRP2.7CLR01H;清新按钮标记为HERE:ACALLDISPACALLKEYSCANACALLKEYPROAJMPHEREDISP:PUSHDPHPUSHDPLPUSHPSWPUSHACCMOVR0,#50H;显示缓冲单元首地址MOV30H,#0FEH;位控码LD0:MOVP0,#0FFH;清位控口,修改SETBP2.7NOPCLRP2.7MOVDPTR,#TABLE;查段码MOVA,@R0MOVCA,@A+DPTRMOVP0,A;送段码SETBP2.6NOPCLRP2.6MOVA,30HMOVP0,A;送位控码SETBP2.7NOPCLRP2.7ACALLDELAYINCR0MOVA,30HJNBACC.7,LD1RLAMOV30H,AAJMPLD0LD1:MOVP0,#00;清段控口,修改SETBP2.6NOPCLRP2.6MOVP0,#0FFH;清位控口,修改SETBP2.7NOPCLRP2.7POPACCPOPPSWPOPDPLPOPDPHRETTABLE:DB3FH,06H,5BH,4FH,66H;01234DB6DH,7DH,07H,7FH,6FH;56789DB77H,7CH,39H,5EH,79H;ABCDEDB71H,00H,76H,38H,40H;F灭HL-DELAY:MOVR1,#02H;延时约1msDEL0:MOVR2,#00HDEL1:DJNZR2,DEL1DJNZR1,DEL0RETKEYSCAN:PUSHDPHPUSHDPLPUSHPSWPUSHACCMOVP0,#00H;送全0码,检查是否有按钮按下SETBP2.7NOPCLRP2.7JNBP3.2,ONECLR01HKEY_END:POPACCPOPPSWPOPDPLPOPDPHRETONE:ACALLDISP;调用现实延时,消抖MOVP0,#0FEH;送01#键扫描码SETBP2.7NOPCLRP2.7JBP3.2,TWOMOV37H,#01HAJMPKEY_DTWO:MOVP0,#0FDH;送0
本文标题:单片机程序+连线1-19
链接地址:https://www.777doc.com/doc-5321467 .html