单片机实验报告学号:100250212姓名:指导教师:实验二一、 实验目的1 、 进一步了解开发系统的功能和使用;2 、 了解程序设计与调试的基本过程;3 、 了解简单程序和分支程序程序的特点和设计。
二、 实验内容1 、 简单程序的设计、输入、调试和运行;2 、 分支程序的设计、输入、调试和运行;三、 实验步骤1、设计、调试双字节乘法程序,功能为:(R2R3)*(R6R7)→R4R5R6R7 输入设计好的程序检查无误后,汇编。
向R2R3和R6R7中输入多组不同的数据,运行程序,观察R4R5R6R7中的内容,分析运行结果是否正确。
2、求符号函数⎪⎩⎪⎨⎧<=>=)0()0()0(1-01X X X Y ,设:X →30H ,Y →31H 输入设计好的程序检查无误后,汇编。
向30H 中输入多个不同的数据,运行程序,观察31H 中的内容,分析运行结果是否正确。
3、将ASCII 码转换十六进制数设ASCII码放在累加器A中,结果放回到A中,如果A中的内容不是十六进制的数的ASCII码,用户标志位F0置1。
输入设计好的程序检查无误后,汇编。
向A中输入多个不同的数据,运行程序,观察A中的内容,分析运行结果是否正确。
四、实验程序及分析结果1、双字节乘法运算程序程序如下:ORG 0000HLJMP MAINMAIN: MOV A, R3 ;先计算R7乘R3MOV B, R7MUL AB ;A中为积的低八位MOV R1,A ;将低八位存入R1中MOV R5,B ;将高八位存入R5中MOV A, R2 ;计算R7乘R2MOV B, R7MUL ABADD A, R5 ;R5加至AMOV R5, A ;将结果存入R5MOV R4, B ;将高位结果存入R4MOV A, R1MOV R7, A ;将低八位存入R7中JNC NEXT1 ;C为零则跳转MOV A, R4 ;如果C为1则将R4加一CLR CADD A, #01MOV R4, ANEXT1: MOV A, R3MOV B, R6MUL ABADD A, R5MOV R5, AMOV R1,BMOV A, R4JNC NEXT2CLR CADD A, #1NEXT2: ADD A, R1MOV R4, AMOV A, R2MOV B, R6MUL ABADD A, R4MOV R4, AMOV A, BJNC NEXT3CLR CADD A, #1NEXT3: MOV R1, AMOV A,R5MOV R6, AMOV A, R4MOV R5, AMOV A, R1MOV R4, AHERE: SJMP HEREEND总体思想为将该16位乘法拆分为四步8位乘法运算在进行带进位的相加程序中每段分别实现一个八位乘法,然后与上次运算结果相加。
实验结果该程序正确正确的执行出了结果,输入数据后其输出数据均正确。
2、符号函数程序:ORG 0000HSTART: MOV A,30HCJNE A,#00H,NZAJMP LLNZ: JB ACC.7,MMMOV A,#01HAJMP LLMM: MOV A,#81HLL: MOV 31H,AHERE: SJMP HEREEND总体思想:将30H中的数与0比较,相等则31H输出为0;不相等判断最高位(符号位),符号位为0,说明是整数,输出为01H;符号位为1,说明为负数,输出为81H。
3、码转换程序ORG 0000HCLR CCLR F0SUBB A,#30HJC NASCCJNE A,#0AH,NE1NOPNE1: JC ASCSUBB A,#07HCJNE A,#0AH,NE2NE2: JC NASCCJNE A,#10H,NE3NE3: JNC ASCNASC: SETB F0ASC: NOPHERE: SJMP HEREEND总体思想:16进制包括0~9,A~F,0~9的ASC值为30~39,A~F的ASC 值为65~70,依次按程序判断给出的数是否在这两个区间之内,满足条件则输出对应的16进制数,不满足条件则用户标志位F0置1.实验三一、实验目的1 、了解汇编语言程序设计与调试的过程;2 、掌握循环程序、查表程序和子程序的特点及设计。
二、实验内容1 、循环程序的设计、输入、调试和运行;2 、查表程序的设计、输入、调试和运行;三、实验步骤1 、排序程序:将N 个数从小到大排列起来。
设R0的内容为数据区的首地址,R7的内容为数据的字节数。
ORG 0000HLJMP MAINMAIN:SS:MOV A,R7MOV R2,AMOV 60H,R0NN:DEC R2MOV A,R2MOV R3,AMOV R0,60HL1:MOV A,@R0INC R0CLR CSUBB A,@R0JC MMMOV A,@R0DEC R0XCH A,@R0INC R0MOV @R0,ASETB F0MM:DJNZ R3,L1MOV A,R2CJNE R2,#01H,RRSJMP JJRR:JB F0,NNJJ:MOV R0,60HHERE: SJMP HEREEND该程序为经典的冒泡排序算法为效率非常高的算法,其大体思想如下:1.比较相邻两个数,如果后一个大于前一个,则将两个数交换,否则不进行任何动作2.继续比较下一个数3.如果本趟比较没有进行交换,则排序完毕2 、查表程序设计一程序,将16进制数转换为对应的ASCII 码。
设16进制数放在R6中,转换结果放在R7中。
ORG 0000HLJMP MAINMAIN: MOV A,R6ANL A,#0FHMOV DPTR, #TABMOVC A,@A+DPTRMOV R7, AMOV R7, AHERE: SJMP HEREORG 0030HTAB :DB ‘012345678’DB ‘9ABCDEF’END程序基本思想:将R6输入的数作为地址偏移量,进行查表寻址,采用DPTR指针寻址,基址为表格起始地址四、实验结果将数存入相应的内存单元,运行程序,排序结果正确程序二中装换结果正确。
实验四单片机中断实验一、实验目的1 、了解单片机的中断过程。
2 、了解单片机中断的触发方式。
3 、了解单片机中断的程序设计。
4 、学习中断服务程序的调试方法。
二、实验内容1 、单片机外部中断的低电平触发方式如图 3.4.1,按住开关K,在INT0 端产生一个低电平信号,触发外部中断,将事先送入寄存器R1中的值由LED 即发光二极管电路显示出来。
2 、单片机外部中断的下降沿触发方式如图 3.4.1,按一下开关K,在INT0 端产生一个下降沿信号,触发外部中断,将事先送入寄存器R1中的值由LED 即发光二极管电路显示出来。
注意:开关Kx可用查询式键盘中的任意一键代替。
三、实验步骤1 、外部中断的低电平触发方式(i )按图4-3 给出的原理图连好电路,其中Kx 可为‘开关量输入如模块’中的任意一个开关,用双头线与INT0 引脚(位于单片机扩展资源区(D1区))连接。
参考程序如下:ORG 0000HAJMP MAINORG 0003HAJMP ITAPORG 0030HMAIN:MOV TCON ,#00HSETB EX0SETB EAHERE:AJMP HEREORG 0040HITAP :MOV A,R1MOV P1, ARETIEND2 、外部中断的下降沿触发方式参考程序如下:ORG 0000HAJMP MAINORG 0003HAJMP ITAPORG 0030HMAIN: MOV TCON , #01HMOV IE , #81HMOV R1, #21HHERE: AJMP HEREORG 0100HITAP : MOV A, P1SWAP AMOV P1, ARETIEND程序一设为低电平触发方式,只要外部存在低电平,则执行中断服务程序,程序二为下降沿触发模式。
四、实验结果程序一在低电平持续期间,不停执行中断服务程序,程序二只在下降沿是执终端服务程序。
实验五单片机定时/计数器实验一、实验目的1 、了解单片机定时/ 计数器原理、工作方式选择;2 、了解单片机定时与计数器的工作过程;3 、了解单片机定时/ 计数器的程序设计方法。
二、实验内容1 、用定时、计数器控制图4-4 中的发光二极管,使其亮两秒,灭两秒,周而复始,设计该程序。
三、实验步骤1 、设T0定时间隔为50ms(方式),当定时时间到后,将P1.7 的输出加到T1端作计数脉冲,需要定时两次才构成一个完整的计数脉冲,因此T1需计数20 次,才能完成2 秒的定时,2 、计算定时/ 计数器的初值T0为定时方式,设其初值为4C00HT1为计数方式初值为256-10=246=ECHORG 0000HAJMP MAINORG 000BHAJMP T0_INTORG 0100HMAIN: MOV TMOD, #61HMOV TL1, #0ECHMOV TH1, #0ECHMOV TH0, #4CHMOV TL0, #00HMOV IE, #82HSETB TR0SETB TR1LOOP1: JBC TF1, LOOP2SJMP LOOP1LOOP2: CPL P1.0SJMP LOOP1T0_INT: MOV TH0, #4CHMOV TL0, #00HCPL P1.7RETIEND每次经过50ms定时器一产生一个中断,将p1.7的电平翻转,产生100ms的脉冲,将其作为T1的计数输入端,则可产生一个周期两秒的脉冲四、实验结果P1.7的小灯按100ms的周期闪烁,P1.0的小灯按2s的周期闪烁。