北方民族大学
Beifang University of Nationalities
《单片机原理及应用》课程实验源程序
北方民族大学电气信息工程学院
二○一七年五月
实验一 清零程序
(设计性实验)
一、实验目的 二、实验原理 三、主要仪器及耗材 四、实验内容与步骤 五、实验注意事项
ORG 0000H MOV R0 , #OFFH MOV DPTR , #0000H MOV A , #00H LOOP: MOVX @DPTR , A INC DPTR DJNZ R0 , LOOP MOV DPTR , #0FFH MOVX @DPTR , A SJMP $ END
实验二 拆字程序
(设计性实验)
一、实验目的 二、实验原理 三、主要仪器及耗材 四、实验内容与步骤
源程序: ;*==========================================================*/ ; 实验内容:编程实现将外部RAM 0000H单元的内容拆开 ; 高4位送外部RAM 0001H单元的低四位 ; 低4位送外部RAM 0002H单元的低四位 ; 将外部RAM的0001H单元和0002H单元的高四位清零 ;*==========================================================*/ ORG 0000H ;程序开始 MOV DPTR , #0000H ;将DPTR指向0000H单元 MOVX A , @DPTR ;将DPTR指示单元的内容送入累加器A MOV R0 , A ;将内容暂存到寄存器R0 ANL A , #0F0H ;屏蔽低四位,取出高四位的值 SWAP A MOV DPTR , #0001H ;将高四位与低四位交换 MOVX @DPTR , A ;将取出的高四位的内容送入0001H单元 MOV A , R0 ; ANL A , #0FH ;取出低四位 ;MOV DPTR , #0002H ;指向0002H单元 INC DPTR MOVX @DPTR , A SJMP $ END
实验三 拼字程序
(设计性实验)
一、实验目的 二、实验原理 三、主要仪器及耗材 四、实验内容与步骤
源程序: /*=====================================================================*/ ; 实验内容:编程实现将外部RAM 0000H和0001H单元内容的低四位做为拼装字节 ; 送入0002H单元 /*=====================================================================*/ ORG 0000H ;程序开始 MOV DPTR , #0000H ;将DPTR指向0000H单元 MOVX A , @DPTR ;将DPTR指示单元的内容送入累加器A ANL A , #0FH ;取出0000H单元的低四位(做为拼装字节的高四位) SWAP A ;将低四位与高四位交换(半字节交换) MOV R0 , A ;将数据暂存到R0 INC DPTR ;将DPTR指向0001H单元 MOVX A , @DPTR ;将DPTR指示单元的内容送入累加器A ANL A , #0FH ;取出0001H单元的低四位(做为拼装字节的低四位) ORL A , R0 ;拼接 INC DPTR ;将DPTR指向0000H单元 MOVX @DPTR , A ;将拼装后的字节送入0002H单元 SJMP $ END
实验四 数据传送程序
(设计性实验)
一、实验目的 二、实验原理 三、主要仪器及耗材 四、实验内容与步骤
源程序: ;==============================================================================*/ ;编成实现将外部RAM 0000H开始的256个单元的内容传送到外部RAM 1000H单元开始的区域中 ;编程思路:由外部RAM的0000H单元直接送入外部RAM ;==============================================================================*/ ORG 0000H MOV DPTR , #0000H ; MOV R0 , #00H ;设置循环次数,减1后变为FFH GET: MOV DPTR , #0000H ;指向源数据起始单元0000H CLR C ;清除进位位C MOV A , DPL ;将DPTR的低8位的数据送入累加器 ADD A , R0 ;将传入A的DPL的值于R0相加
MOV MOV ADDC MOV MOVX MOV MOV CLR C MOV ADD A MOV MOV ADDC MOV MOV MOVX DJNZ SJMP END DPL , A ;将相加后的数据重新传入DPL A , DPH ;更新DPH的内容 A , #0 ; DPH , A ; A , @DPTR ;取出DPTR单元的内容 R1 , A ;将A中的内容送入R1暂存 DPTR , #1000H ;将DPTR指向目的数据起始单元1000H ;清除进位位C A , DPL ;将DPTR的低8位的数据送入累加器 , R0 ;将传入A的DPL的值于R0相加 DPL , A ;将相加后的数据重新传入DPL A , DPH ;更新DPH的内容 A , #0 ; DPH , A ; A , R1 ; @DPTR , A ;将累加器A的值送入外部ROM的目的地址 R0 , GET ;循环 $ ;程序停机 ;结束 实验五 P3.3口输入、P1口输出
(设计性实验)
一、实验目的
二、实验原理 三、主要仪器及耗材 四、实验内容与步骤
源程序: ;实验5---P3.3口输入、P1口输出 ; KEY_P33 EQU P3.3 ORG 00H
LJMP INIT ORG 30H INIT: MOV R0, #00H MOV A, R0 MOV P1, A MAIN: SETB P3.3 ;关灯 JNB KEY_P33 , readKeyValue SJMP MAIN readKeyValue: ;若有按键按下则跳转到 readKeyValue CALL DELAY10MS ;调用延时函数,消抖 JNB KEY_P33 , $ ;松手检测 CALL DELAY10MS LJMP showNum showNum: INC R0 MOV A , R0 CPL A MOV P1 , A LJMP MAIN ;*************; ; 延时程序 ; ;*************; DELAY10MS: MOV R6 , #05H DE1: MOV R7 , #0F8H DE2: DJNZ R7 , DE2 DJNZ R6 , DE1 RET END
实验六 脉冲计数
(设计性实验)
一、实验目的 二、实验原理 三、主要仪器及耗材 四、实验内容与步骤
源程序: ;****************************** ;实验6: 脉冲计数 ; 将T0配置成计数器 ;****************************** ORG 0000H LJMP START ORG 0030H START: MOV P1, #0FFH MOV TMOD, #05H ;T0模式1,计数方式 MOV TH0, #00H ;送初值 MOV TL0, #00H SETB TR0 ;启动 LOOP: MOV A, TL0 ;将TL0送P1口显示 CPL A MOV P1, A SJMP LOOP END
实验七 流水灯实验
(设计性实验)
一、实验目的 二、实验原理 三、主要仪器及耗材
四、实验内容与步骤
源程序: IS100MS BIT 00H ORG 0000H LJMP START ORG 000BH LJMP TM0 ORG 0030H START: MOV A , #0FEH MOV P1 , A ; LOOP1: TM0: S1: END ; MOV R0 , #10 ;时基10MS, D8EFH, 10次100MS CLR IS100MS ;100MS未到, IS100MS位清零 MOV TMOD , #01H ;T0定时器工作方式1 MOV TH0 , #0D8H ;计时时基10MS MOV TL0 , #0F0H SETB EA ;CPU开中断 SETB ET0 ;允许T0中断 SETB TR0 ;启动T0定时器 JNB IS100MS , LOOP1 ;守候100MS到, 在中断程序中该位置“1” RL A ;左循环移位1次 MOV P1 , A ;送P1显示 CLR IS100MS ;清零IS100MS位,防止多次进入 SJMP LOOP1 MOV TH0 , #0D8H ;计时时基10MS MOV TL0 , #0EFH DJNZ R0 , S1 ;10次未完, 转 SETB IS100MS ;100MS到置“1” IS100MS位 MOV R0 , #10 ;10次完, 100MS到, R0重新赋值10 RETI