北邮微原软件时钟报告

合集下载

北邮 通原软件实验报告 16QAM

北邮 通原软件实验报告 16QAM

实验一: 16QAM调制与解调一、实验目的1、熟悉16QAM信号的调制与解调,掌握SYSTEMVIEW软件中,观察眼图与星座图的方法。

2、强化SYSTEMVIEW软件的使用,增强对通信系统的理解。

二、实验原理1、16QAM16QAM是指包含16种符号的QAM调制方式。

16QAM 调制原理方框图:图一16QAM调制框图16QAM解调原理方框图:图二16QAM解调框图16QAM 是用两路独立的正交4ASK 信号叠加而成,4ASK 是用多电平信号去键控载波而得到的信号。

它是2ASK 体制的推广,和2ASK 相比,这种体制的优点在于信息传输速率高。

正交幅度调制是利用多进制振幅键控(MASK)和正交载波调制相结合产生的。

16 进制的正交振幅调制是一种振幅相位联合键控信号。

16QAM 的产生有2 种方法:(1)正交调幅法,它是有2 路正交的四电平振幅键控信号叠加而成;(2)复合相移法:它是用2 路独立的四相位移相键控信号叠加而成。

在这里我们使用第一种方法。

16QAM信号的星座图:图三16QAM星座图上图是16QAM的星座图,图中f1(t)和f2(t)是归一化的正交基函数。

各星座点等概出现。

星座图中最近的距离与解调误码率有很密切的关系。

上图中的最小距离是dmin=2。

16QAM的每个星座点对应4个比特。

哪个星座点代表哪4比特,叫做星座的比特映射。

通常采用格雷映射,其规则是:相邻的星座点只差一个比特。

实验所需模块连接图如下所示:图四模块连接图各个模块参数设置:元件编号属性类型参数设置0,2 Source PN seq Amp=1V;Rate=10Hz;Levels=4 4,13 Source Sinusiod Amp=1V;Rate=100Hz12 Source Gauss Noise Std Dev=0V;Mean=0V5,7,9,10 Multipler ——————3 Adder ——————17,18 Operator Linear Sys Butterworth,3Poles,fc=10Hz 19,14,15 Sink ——————设置系统时间为20Sec(观察眼图),仿真频率1000Hz三、实验步骤(1)按照实验所需模块连接图,连接各个模块(2)设置各个模块的参数:①信号源部分:PN序列发生器产生双极性NRZ序列,频率10HZ图五信号源设置示意图②载频:频率设置为100Hz。

北邮通信原理软件实验报告

北邮通信原理软件实验报告

北邮通信原理软件实验报告北邮通信原理软件实验报告通信原理软实验实验报告学院:信息与通信工程学院班级:@@@@@@@@@@姓名:execf2t.sci;fs=800;//采样速率T=200;//截短时间N=T*fs;//采样点数dt=1/fs;//时域采样间隔t=[-T/2:dt:T/2-dt];//时域采样点df=1/T;//频域采样间隔f=[-fs/2:df:fs/2-df];//频域采样点数fm1=1;//待观测正弦波频率,单位KHz,下同fm2=0.5; //待观测余弦波频率fc=20;//载波频率//以上为初始化参数设置m1=sin((2*%pi)*fm1*t);//待观测正弦波部分M1=t2f(m1,fs);//傅里叶变换MH1=-%i*sign(f).*M1;//希尔伯特变换mh1=real(f2t(MH1,fs));//希尔伯特反变换m2=2*cos((2*%pi)*fm2*t);//待观测余弦波部分M2=t2f(m2,fs);//傅里叶变换MH2=-%i*sign(f).*M2;//希尔伯特变换mh2=real(f2t(MH2,fs));//希尔伯特反变换s1=(1+(m1+m2)/abs(max(m1+m2))).*cos((2*%pi)*fc*t); //AM信号时域表达式S1=t2f(s1,fs);//AM信号频域表达式s2=(m1+m2).*cos((2*%pi)*fc*t);//DSB-SC信号时域表达式S2=t2f(s2,fs);//DSB-SC信号频域表达式s3=(m1+m2).*cos((2*%pi)*fc*t)-(mh1+mh2).*sin((2*%pi)*fc*t);//SSB信号时域表达式,以上边带为例S3=t2f(s3,fs);//SSB信号上边带频域表达式//以上是仿真计算部分//以下为绘图部分//AM信号xset(window,1)plot(f,abs(S1))title(AM信号频谱)xlabel(f)ylabel(S(f))mtlb_axis([-25,25,0,max(abs(S1))]); xset( window,2)plot(t,s1)title(AM信号波形)xlabel(t)ylabel(s(t))mtlb_axis([-3,3,-3,3]);//DSB-SC信号window,3)plot(f,abs(S2))title(DSB-SC信号频谱)xlabel(f)ylabel(S(f))mtlb_axis([-25,25,0,max(abs(S2))]); xset( window,4)plot(t,s2)title(DSB-SC信号波形)xlabel(t)s(t))mtlb_axis([-1,4,-3,3]);//SSB信号(以上边带为例)xset(window,5)plot(f,abs(S3))title(SSB信号频谱)xlabel(f)ylabel(S(f))mtlb_axis([-25,25,0,max(abs(S3))]) xset(window,6)plot(t,s3)title(SSB信号波形)xlabel(t)ylabel(s(t))mtlb_axis([0,6,-3,3]) 2、产生的波形图:1)AM信号:2)AM信号频谱:3)DSB-SC信号:4)DSB-SC信号的频谱:5)SSB信号波形:6)SSB信号频谱:3、实验心得:做这个实验时的我的理论知识已经准备得比较充分了,所以难点主要在编程方面。

北京邮电大学微原硬件实验报告汇编

北京邮电大学微原硬件实验报告汇编

微原硬件实验报告班级:学号:班内序号:姓名:实验一、二基本的I/O实验一、实验目的1、掌握I/O地址译码电路的工作原理。

2、掌握简单并行接口的工作原理及使用方法。

二、实验原理及内容1、实验电路如图1-1所示,其中74LS74为D触发器,可直接使用实验台上数字电路实验区的D触发器,74LS138为地址译码器。

译码输出端Y0~Y7在实验台上“I/O 地址“输出端引出,每个输出端包含8个地址,Y0:280H~287H,Y1:288H~28FH,……当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。

例如:执行下面两条指令MOV DX,2A0HOUT DX,AL(或IN AL,DX)Y4输出一个负脉冲,执行下面两条指令MOV DX,2A8HOUT DX,AL(或IN AL,DX)Y5输出一个负脉冲。

利用这个负脉冲控制L7闪烁发光(亮、灭、亮、灭、……),时间间隔通过软件延时实现。

2、按下面图4-2-1简单并行输出接口电路图连接线路(74LS273插通用插座,74LS32用实验台上的“或门”)。

74LS273为八D触发器,8个D输入端分别接数据总线D0~D7,8个Q输出端接LED显示电路L0~L7。

3、编程从键盘输入一个字符或数字,将其ASCⅡ码通过这个输出接口输出,根据8个发光二极管发光情况验证正确性。

4、按下面图4-2-2简单并行输入接口电路图连接电路(74LS244插通用插座,74LS32用实验台上的“或门”)。

74LS244为八缓冲器,8个数据输入端分别接逻辑电平开关输出K0~K7,8个数据输出端分别接数据总线D0~D7。

5、用逻辑电平开关预置某个字母的ASCⅡ码,编程输入这个ASCⅡ码,并将其对应字母在屏幕上显示出来。

三、硬件接线图与软件程序流程图图1:实验一的硬件接线图图2:实验二的硬件接线图图3:实验二的程序流程图四、源程序1、实验一源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK ;延时子程序DELAY PROC NEARMOV BX,500PUSH CXLOOP2: MOV CX,0FFFHWAIT: LOOP WAITDEC BXJNZ LOOP2POP CXRETDELAY ENDPSTART: MOV CX,0FFFFH;二极管闪烁部分LOOP1: MOV DX,2A0H ;灯亮MOV AL,0FFHOUT DX,ALCALL DELAYMOV DX,2A8H ;灯灭MOV AL,0OUT DX,ALCALL DELAYLOOP LOOP1CODE ENDSEND START2、实验二的源程序DATA SEGMENTDATA ENDSSTACK SEGMENT STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AH,1 ;键盘输入INT 21HCMP AL,27 ;检测是否为ESC键JZ EXITMOV DX,2A8H ;输出OUT DX,ALJMP START;返回DOSEXIT: MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果1、实验一:二极管闪烁显示2、实验二:键盘输入,然后二极管显示键盘输入的ASCⅡ码六、实验总结本实验遇到的问题主要是:1、二极管显示不正常,主要是延时的问题,调整一下就好了。

北京邮电大学-微机原理硬件实验报告

北京邮电大学-微机原理硬件实验报告

微机原理与接口技术硬件实验报告学院:信息与通信工程学院班级:201******学生姓名:****** ******学号:201******* 201*******班内序号:** **实验一熟悉实验环境及IO的使用一、实验目的:1. 通过实验了解和熟悉实验台的结构,功能及使用方法。

2. 通过实验掌握直接使用Debug 的I、O 命令来读写IO 端口。

3. 学会Debug 的使用及编写汇编程序二、实验内容:1. 学习使用Debug 命令,并用I、O 命令直接对端口进行读写操作,2.用汇编语言编写跑马灯程序。

(使用EDIT 编辑工具)实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

B.通过输出端口控制灯的工作状态(低电平灯亮)三、实验步骤:1.实验板的IO 端口地址为0E8E0H在Debug 下,I 是读命令。

(即读输入端口的状态---拨码开关的状态)O 是写命令。

(即向端口输出数据---通过发光管来查看)进入Debug 后,读端口拨动实验台上八位拨码开关输入I 端口地址回车屏幕显示 xx 表示从端口读出的内容,即八位开关的状态ON 是0,OFF 是 1 写端口输入 O 端口地址xx (xx 表示要向端口输出的内容)回车查看实验台上的发光二极管状态,0 是灯亮,1 是灯灭。

2. 在Debug 环境下,用a 命令录入程序,用g 命令运行C>Debug -amov dx, 端口地址mov al,输出内容out dx, almov ah, 0bhint 21hor al, aljz 0100int 20h-g运行查看结果,修改输出内容再运行查看结果分析mov ah, 0bhint 21hor al, aljz 0100int 20h该段程序的作用:检测键盘有没有按键,有则返回DOS。

没有继续执行3.利用EDIT 工具编写汇编写跑马灯程序程序实现功能A.通过读入端口状态(ON 为低电平),选择工作模式(灯的闪烁方式、速度等)。

电子时钟实验报告

电子时钟实验报告

电⼦时钟实验报告综合实验报告(电⼦钟)⼀、实验⽬的主要⽬的是回顾《微机原理与应⽤》以及其他课程所学知识,并能灵活运⽤到实验当中。

掌握8253A、7段数码管,8259A、8255A的应⽤。

⼆、实验设备STAR 系列实验仪⼀套、PC 机⼀台。

三、实验内容利⽤STAR ES598PCI实验仪设计⼀个具有时、分、秒显⽰功能的电⼦时钟,并定义⼀个启动键,当按下该键时时钟从当前设定值开始⾛时,时间数据可⽤数码管显⽰。

(1) 利⽤8253计数器对标准时钟信号计数,分别实现时、分、秒计时(2) 键盘设定⼀个按键,当按键按下则从已设定的时间开始计时(已设定的时间值可在显⽰缓冲区中预置)(3) 时、分、秒的数值均显⽰在数码管上四、实验步骤1、主机连线说明:E5 区:CLK —— B2 区:2ME5 区:CS、A0 —— A3 区:CS5、A0E5 区:A、B、C、D —— G5 区:A、B、C、DB3 区:CS、A0 —— A3 区:CS1、A0B3 区:INT、INTA —— ES8088:INTR、INTAB3 区:IR0 —— C5 区:OUT0C5 区:CS(8253)、A0、A1 —— A3 区:CS2、A0、A1C5 区:GATE0 —— C1 区:VCCC5 区:CLK0 —— B2 区:62.5K2、运⾏程序,按G5 区的F 键,设置时钟初值;3、观察G5 区数码管上显⽰的时间是否正确。

五、实验流程图设置时间⼦程序:8253⼦程序:六、实验程序.MODEL TINYEXTRN Display8:NEAR, GetKeyA:NEAR, GetKeyB:NEAR IO8259_0 EQU 0F000HIO8259_1 EQU 0F001HCon_8253 EQU 0E003HT0_8253 EQU 0E000H.STACK 200.DATAhalfsec DB 0 ;0.5秒计数Sec DB 0 ;秒Min DB 0 ;分hour DB 0 ;时buffer DB 8 DUP(0) ;显⽰缓冲区,8个字节buffer1 DB 8 DUP(0) ;显⽰缓冲区,8个字节bNeedDisplay DB 0 ;需要刷新显⽰number DB 0 ;设置哪⼀位时间bFlash DB 0 ;设置时是否需要刷新.CODESTART: MOV AX,@DATAMOV DS,AXMOV ES,AXNOPmov sec,0 ;时分秒赋为00:00:00mov min,0mov hour,0MOV bNeedDisplay,1 ;显⽰初始值CALL Init8253CALL Init8259CALL WriIntverSTIMAIN: CALL GetKeyA ;按键扫描JNB Main1CMP AL,0FH ;设置时间JNZ Main1CALL SetTimeMain1: CMP bNeedDisplay,0JZ MAINCALL Display_LED ;显⽰时分秒MOV bNeedDisplay,0 ;1s定时到刷新转速Main2: JMP MAIN ;循环进⾏实验内容介绍与测速功能测试SetTime PROC NEAR LEA SI,buffer1CALL TimeToBufferMOV Number,0Key: CMP bFlash,0JZ Key2LEA SI,buffer1LEA DI,bufferMOV CX,8REP MOVSBCMP halfsec,0JNZ FLASHMOV BL,numberNOT BLAND BX,07HLEA SI,bufferMOV BYTE PTR [SI+BX],10H ;当前设置位置产⽣闪烁效果FLASH: LEA SI,buffer CALL Display8MOV bFlash,0Key2: CALL GetKeyAJNB KeyCMP AL,0EH ;放弃设置JNZ Key1JMP ExitKey1: CMP AL,0FHJZ SetTime8SetTime1: CMP AL,10JNB Key ;⽆效按键CMP number,0JNZ SetTime2CMP AL,3 ;调整时的⼗位数JNB KeyMOV buffer1 + 7,ALJMP SetTime7SetTime2: CMP number,1JNZ SetTime3CMP buffer1 + 7,2JB SetTime2_1 ;修改后可以在设置时间时,设置时钟为04到09之间的数值 CMP AL,4 JNB KeySetTime2_1: MOV buffer1 + 6,ALINC numberJMP SetTime7SetTime3: CMP number,3JNZ SetTime4CMP AL,6 ;调整分的⼗位数JNB KeyMOV buffer1 + 4,ALJMP SetTime7SetTime4: CMP number,4JNZ SetTime5MOV buffer1 + 3,AL ;调整分的个位数INC numberJMP SetTime7SetTime5: CMP number,6JNZ SetTime6CMP AL,6 ;调整秒的⼗位数JB SetTime5_1JMP KeySetTime5_1: MOV buffer1 + 1,ALJMP SetTime7SetTime6: MOV buffer1,AL ;调整秒的个位数SetTime7: INC numberCMP number,8JNB SetTime8MOV bFlash,1 ;需要刷新JMP KeySetTime8: MOV AL,buffer1 + 1 ;确认MOV BL,10MUL BLADD AL,buffer1MOV sec,AL ;秒MOV AL,buffer1 + 4MUL BLADD AL,buffer1 + 3MOV min,AL ;分MOV AL,buffer1 + 7MUL BLADD AL,buffer1 + 6CMP al,18h ;修改后可以解决时间设置时,时钟设置为24以上的数值 JNB exit MOV hour,AL ;时JMP ExitExit: RETSetTime ENDP;hour min sec转化成可显⽰格式TimeToBuffer PROC NEARMOV AL,secXOR AH,AHMOV BL,10DIV BLMOV [SI],AHMOV [SI + 1],AL ;秒MOV BYTE PTR [SI + 2],10H ;这位不显⽰MOV AL,minXOR AH,AHDIV BLMOV [SI + 3],AHMOV [SI + 4],AL ;分MOV BYTE PTR [SI + 5],10H ;这位不显⽰MOV AL,hourXOR AH,AHDIV BLMOV [SI + 6],AHMOV [SI + 7],AL ;时RETTimeToBuffer ENDP;显⽰时分秒Display_LED PROC NEAR LEA SI,bufferCALL TimeToBufferLEA SI,bufferCALL Display8 ;显⽰RETDisplay_LED ENDP;0.5s产⽣⼀次中断Timer0Int: PUSH AXPUSH DXMOV bFlash,1INC halfsecCMP halfsec,2JNZ Timer0Int1MOV bNeedDisplay,1MOV halfsec,0INC secCMP sec,60JNZ Timer0Int1MOV sec,0INC minCMP min,60JNZ Timer0Int1MOV min,0INC hourCMP hour,24JNZ Timer0Int1MOV hour,0Timer0Int1: MOV DX,IO8259_0 MOV AL,20HOUT DX,ALPOP DXPOP AXIRETInit8253 PROC NEARMOV DX,Con_8253MOV AL,34HOUT DX,AL ;计数器T0设置在模式2状态,HEX计数 MOV DX,T0_8253 MOV AL,12HOUT DX,ALMOV AL,7AHOUT DX,AL ;CLK0=62.5kHz,0.5s定时RETInit8253 ENDPInit8259 PROC NEARMOV DX,IO8259_0MOV AL,13HOUT DX,ALMOV DX,IO8259_1MOV AL,08HOUT DX,ALMOV AL,09HOUT DX,ALMOV AL,0FEHOUT DX,ALRETInit8259 ENDPWriIntver PROC NEARPUSH ESMOV AX,0MOV ES,AXMOV DI,20HLEA AX,Timer0IntSTOSWMOV AX,CSSTOSWPOP ESRETWriIntver ENDPEND START七、实验结果⼋、实验⼼得通过这两天的实习使我对微机原理有了更深⼊的了解,原来只是停留在想象中的,就像⼀些编写的程序也只是通过⾃我检查来看程序是否错误,有些问题很难发现,但是通过这两天的实习,使原本空洞的知识进⼊了实际的操作中,特别是对对电⼦钟的实验发现微机原理可以实验很多东西,我们现实中的很多东西都是通过微机原理的编程实现的,⽐如⼗字路⼝的红绿灯、数字式温度计、语⾳模块、光照强度的测试……,切实体验到了微机原理的功能强⼤以及它的重要性。

北邮数字逻辑课程设计实验报告(电子钟显示)

北邮数字逻辑课程设计实验报告(电子钟显示)

实验四:电子钟显示一、实验目的(1)掌握较复杂的逻辑设计和调试。

(2)学习用原理图+VHDL语言设计逻辑电路。

(3)学习数字电路模块层次设计。

(4)掌握ispLEVER 软件的使用方法。

(5)掌握ISP 器件的使用。

二、实验所用器件和设备在系统可编程逻辑器件ISP1032 一片示波器一台万用表或逻辑笔一只TEC-5实验系统,或TDS-2B 数字电路实验系统一台三、实验内容数字显示电子钟1、任务要求(1)、时钟的“时”要求用两位显示;上、下午用发光管作为标志;(2)、时钟的“分”、“秒”要求各用两位显示;(3)、整个系统要有校时部分(可以手动,也可以自动),校时时不能产生进位;(4)*、系统要有闹钟部分,声音要响5秒(可以是一声一声的响,也可以连续响)。

VHDL源代码:LIBRARY ieee;USE ieee.std_logic_1164.all;USE ieee.std_logic_unsigned.all;----主体部分-ENTITY clock isport(clk,clr,put,clk1 : in std_logic; -- clr 为清零信号,put 为置数脉冲,clk1 为响铃控制时钟choice : in std_logic; --用来选择时钟状态的脉冲信号lighthour : out std_logic_vector(10 downto 0);lightmin : out std_logic_vector(7 downto 0);lightsec : out std_logic_vector(7 downto 0); --输出显示ring : out std_logic); --响铃信号end clock;--60进制计数器模块ARCHITECTURE func of clock iscomponent counter_60port(clock : in std_logic;clk_1s : in std_logic;putust : in std_logic;clr : in std_logic;load : in std_logic;s1 : out std_logic_vector(3 downto 0);s10 : out std_logic_vector(3 downto 0);co : out std_logic);end component;--24进制计数器模块component counter_24port(clock : in std_logic;clk_1s : in std_logic;putust : in std_logic;clr : in std_logic;load : in std_logic;s1 : out std_logic_vector(3 downto 0);s10 : out std_logic_vector(6 downto 0));end component;signal sec,a:std_logic; --- 2 分频产生1s信号signal l1,l2,l3:std_logic; ---判定对时间三部分修改signal c1,c2:std_logic; ---进位信号signal load:std_logic_vector(1 downto 0);signal temp:integer range 0 to 2499;signal temp1:integer range 0 to 95; --计数信号signal sec_temp:std_logic_vector(7 downto 0);--总进程beginu1 : counter_60 port map (sec,sec,put,clr,l1,sec_temp(3 downto 0),sec_temp(7 downto 4),c1); u2 : counter_60 port map (c1,sec,put,clr,l2,lightmin(3 downto 0),lightmin(7 downto 4),c2);u3 : counter_24 port map (c2,sec,put,clr,l3,lighthour(3 downto 0),lighthour(10 downto 4)); lightsec(7 downto 0)<=sec_temp(7 downto 0);--状态转换process (choice)beginif (choice'event and choice='1') thencase load iswhen "00" => l1<='0'; --非修改状态l2<='0';l3<='0';load<="01";when "01" => l1<='0'; --此状态下对小时进行修改l2<='0';l3<='1';load<="10";when "10" => l1<='0'; --此状态下对分钟进行修改l2<='1';l3<='0';load<="11";when others => l1<='1'; --此状态下对秒进行修改l2<='0';l3<='0';load<="00";end case;end if;end process;--计数进程process(clk)beginif (clk'event and clk='1') then --分频if (temp=2499) thentemp <= 0;sec<=not sec;elsetemp <= temp+1;end if;end if;end process;--响铃进程process(clk1)beginif(clk1'event and clk1='1') thenif (temp1=95) thentemp1<=0;a<=not a;elsetemp1<=temp1+1;end if;end if;end process;ring<=a when (c2='1' and sec_temp<5 and sec='1') else --5s整点响铃'0';end func;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter_60 isport (clock : in std_logic; --计数信号,即低位的进位信号或时钟脉冲信号clk_1s : in std_logic; --周期1s 的时钟信号putust : in std_logic; --调表置数信号clr : in std_logic; --清零load : in std_logic; --判定信号s1 : out std_logic_vector(3 downto 0); --计数器的个位s10 : out std_logic_vector(3 downto 0); --计数器的十位co : out std_logic );end counter_60;if(load=1 ) --防止脉冲产生进位co_ temp<=’0’;architecture func of counter_60 issignal s1_temp: std_logic_vector(3 downto 0);signal s10_temp : std_logic_vector(3 downto 0);signal clk,co_temp : std_logic;beginclk<=clock when load='0' elseputust;process (clk,clr)beginif (clr='1') thens1_temp <= "0000";s10_temp <= "0000";elsif (clk'event and clk='1')then --进位判断if (s1_temp=9) thens1_temp <= "0000";if (s10_temp=5) thens10_temp <= "0000";co_temp<='1';elseco_temp<='0';s10_temp <= s10_temp+1;end if;elseco_temp<='0';s1_temp <= s1_temp+1;end if;end process;s1 <= s1_temp when (clk_1s='1'or load='0') else"1111";s10 <= s10_temp when (clk_1s='1' or load='0') else"1111";co <= co_temp when (load='0') else'0';end func;library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;--24进制计数器entity counter_24 isport(clock : in std_logic; --计数信号clk_1s : in std_logic; --周期1s 的时钟信号putust : in std_logic;clr : in std_logic; --清零信号load : in std_logic; --判定信号s1 : out std_logic_vector(3 downto 0); --计数器的个位s10 : out std_logic_vector(6 downto 0)); --计数器的十位end counter_24;architecture func of counter_24 issignal s1_temp : std_logic_vector(3 downto 0);signal s10_temp : std_logic_vector(1 downto 0);signal clk : std_logic;beginclk<=clock when load='0' elseprocess (clk,clr)beginif (clr='1') thens1_temp <= "0000";s10_temp <= "00";elsif (clk'event and clk='1') thenif (s1_temp=3 and s10_temp=2) then s1_temp <= "0000";s10_temp <= "00";elsif (s1_temp=9) thens1_temp<="0000";s10_temp<=s10_temp+1;elses1_temp <= s1_temp+1;end if;end if;end process;--显示进程process(s10_temp)beginif (clk_1s='1' or load='0') thencase s10_temp iswhen "00" => s10<="1111110";when "01" => s10<="0110000";when "10" => s10<="1101101";when others => null;end case;elses10<="0000000";end if;end process;s1 <= s1_temp when (clk_1s='1' or load='0') else"1111";end func;四、实验小结:注意当时钟处于被修改状态时,即对时、分、秒的值进行修改时,不应产生进位,产生很多莫名其妙的错误,如修改后有进位(分钟为00)时,或者自行到整点响铃后,再次给脉冲会进位的情况。

微机原理闹钟实验报告

微机原理闹钟实验报告

微机原理闹钟实验报告实验名称:微机原理闹钟实验报告实验目的:1. 了解单片机的基本工作原理和编程方法;2. 学习如何使用单片机设计并实现闹钟功能;3. 掌握数字时钟显示技术。

实验器材:1. 单片机实验箱;2. AT89C52单片机;3. LED数码管;4. 4位开关;5. 电源线;6. 连线线缆。

实验原理:本次实验使用单片机AT89C52来设计和实现闹钟功能。

单片机是一种微型电子计算机系统,具有高度集成、功能强大等特点。

数码管是一种常见的数字显示装置,适用于时钟、计时器等场合。

实验步骤:1. 将AT89C52单片机与LED数码管通过连接线连接起来,保证电源线的正负极连接正常。

2. 编写C程序,实现显示当前时间的功能。

通过编程可以将当前时间在数码管上显示出来。

3. 设定闹钟时间和闹铃的功能,通过编程实现。

当闹钟时间到达时,数码管上会显示闹钟时间,并通过蜂鸣器发出声音。

4. 调试程序,确保闹钟功能正常运行。

5. 完成闹钟的相关操作,包括设置闹钟时间、启动闹钟、关闭闹钟等功能。

实验结果:经过编程和调试,我们成功实现了微机原理闹钟的功能。

我们能够通过设置闹钟时间并启动闹钟来实现报时的功能。

当闹钟时间到达时,数码管上会显示相应的时间,并通过蜂鸣器发出声音,起到提醒作用。

实验总结:通过这次实验,我深入了解了单片机的基本工作原理和编程方法。

同时,我学会了使用单片机设计和实现闹钟功能,并掌握了数字时钟显示技术。

这次实验让我对单片机的应用有了更深刻的认识,并提高了我对数字电路设计和编程的能力。

同时,我还发现了实验过程中可能存在的问题和改进的空间。

例如,我可以进一步完善闹钟功能,加入更多的定时和报时功能,提高闹钟的多样化和实用性。

此外,我还可以优化程序的运行效率,提高系统的稳定性和响应速度。

总之,本次实验对我的学习和提高具有重要意义。

通过实践操作,我深入理解了微机原理闹钟的设计与实现,拓宽了我的知识面和实践能力。

我将继续深入学习和掌握微机原理和相关技术,为以后的学习和研究打下坚实的基础。

北邮通信原理软件实验报告

北邮通信原理软件实验报告

北邮通信原理软件实验报告一、实验目的本次实验的目的是通过使用软件进行通信原理实验,探究数字通信系统的原理和性能。

二、实验内容1.利用软件计算并绘制理想低通滤波器的频率响应曲线。

2.通过软件模拟并比较维纳滤波器与理想低通滤波器的频率响应曲线。

3.仿真带通调制器和解调器在理想信道中的性能。

三、实验步骤1.理想低通滤波器的设计:(1)利用软件,设置滤波器参数,如截止频率和滤波器类型。

(2)计算并绘制理想低通滤波器的频率响应曲线。

2.维纳滤波器与理想低通滤波器的比较:(1)利用软件设置维纳滤波器参数,如截止频率和信噪比。

(2)仿真并比较维纳滤波器与理想低通滤波器的频率响应曲线。

3.带通调制器和解调器的性能仿真:(1)设置带通调制器和解调器的参数,如载波频率和调制系数。

(2)仿真并分析带通调制器和解调器的性能,如频率响应和误码率。

四、实验结果五、实验分析通过本次实验,我们对数字通信系统的原理和性能有了更深入的了解。

首先,理想低通滤波器的频率响应曲线能够更清晰地展现滤波器的特性,帮助我们更好地了解滤波器的设计和应用。

其次,维纳滤波器相对于理想低通滤波器而言,频率响应存在一定的失真,但对于噪声有一定的抑制作用。

在实际应用中,需要根据具体需求选择适合的滤波器类型。

最后,带通调制器和解调器的性能仿真结果能够帮助我们评估系统的性能,如误码率和频率响应。

通过调整调制系数和载波频率,可以使系统在一定范围内具有较好的性能。

六、实验结论通过本次实验的软件仿真,我们探究了数字通信系统的原理和性能。

实验结果显示,理想低通滤波器具有良好的频率响应特性;维纳滤波器能对噪声进行一定的抑制,但频率响应存在一定的失真;带通调制器和解调器在适当的调制系数和载波频率下能够获得较低的误码率和良好的频率响应。

总之,本次实验通过软件仿真,使我们更好地理解了通信原理中的数字通信系统及其性能分析方法,提高了我们的实践能力和理论知识水平。

北邮通原软件实验报告

北邮通原软件实验报告

北邮通原软件实验报告北京邮电大学实验报告题目:班级:专业:姓名:成绩:实验1:抽样定理一.实验目的(1)掌握抽样定理(2)通过时域频域波形分析系统性能二.实验原理抽样定理:设时间连续信号m(t),其最高截止频率为fm ,如果用时间间隔为T抽样过程原理图(时域)重建过程原理图(频域)具体而言:在一个频带限制在(0,f h)内的时间连续信号f(t),如果以小于等于1/(2 f h)的时间间隔对它进行抽样,那么根据这些抽样值就能完全恢复原信号。

或者说,如果一个连续信号f(t)的频谱中最高频率不超过f h,这种信号必定是个周期性的信号,当抽样频率f S≥2 f h时,抽样后的信号就包含原连续信号的全部信息,而不会有信息丢失,当需要时,可以根据这些抽样信号的样本来还原原来的连续信号。

根据这一特性,可以完成信号的模-数转换和数-模转换过程。

三.实验步骤1.将三个基带信号相加后抽样,然后通过低通滤波器恢复出原信号。

实现验证抽样定理的仿真系统,同时在必要的输出端设置观察窗。

如下图所示2.设置各模块参数三个基带信号频率从上至下依次为10hz、20hz、40hz。

抽样信号频率fs设置为80hz,即2*40z。

(由抽样定理知,fs≥2fH)。

低通滤波器频率设置为40hz 。

设置系统时钟,起始时间为0,终止时间设为1s.抽样率为1khz。

3.改变抽样速率观察信号波形的变化。

四.实验结果五.实验建议、意见将抽样率fs设置为小于两倍fh的值,观察是否会产生混叠失真。

实验2:验证奈奎斯特第一准则一.实验目的(1)理解无码间干扰数字基带信号的传输;(2)掌握升余弦滚降滤波器的特性;(3)通过时域、频域波形分析系统性能。

二.实验原理基带传输系统模型奈奎斯特准则提出:只要信号经过整形后能够在抽样点保持不变,即使其波形已经发生了变化,也能够在抽样判决后恢复原始的信号,因为信息完全恢复携带在抽样点幅度上。

无码间干扰基带传输时,系统冲击响应必须满足x(nTs)=1(n=0); x(nTs)=0(n=!0)。

微原硬件北邮

微原硬件北邮

微原硬件实验报告班级:2010211101 班学号:102100班内序号:姓名:实验一I/O地址译码一.实验目的掌握I/O地址译码电路的工作原理二.实验内容当cpu执行I/O指令且地址哎280H~2BFH范围内,译码器选中,必有一根译码器输出负脉冲,利用这个负脉冲控制L7闪烁发光,时间间隔通过软件实现。

三.源程序代码i oport equ 00houtport1 equ ioport+2a0houtport2 equ ioport+2a8hcode segmentassume cs:codestart:mov dx,outport1out dx,al ;将al中的数值输出到地址为dx的端口call delaymov dx,outport2out dx,alcall delaymov ah,1int 16h ;16h为中断向量标号je start ;mov ah,4chint 21hdelay proc nearmov bx,200lll: mov cx,0ll: loop lldec bxjne lllretdelay endpcode endsend start四.实验收获和体会通过这次实验,我对I/O地址译码器的工作原理有了了解,对软件和硬件的配合操作有了初步认识。

实验二简单并行接口一.实验目的掌握简单并行接口的工作原理及使用方法二.实验原理及内容编程从键盘输入一个符号或者数字,将其ASCII码通过这个输出接口输出,根据八个发光二极管发光情况验证正确性。

三.程序流程图四.源程序代码ls273 equ 2a8hcode segment assume cs:code start: mov ah,2mov dl,0dhint 21hmov ah,1int 21hcmp al,27je exitmov dx,ls273out dx,aljmp start exit: mov ah,4chint 21hcode ends五.实验心得与体会该实验是第一次实验课和实验一一起做的,也比较简单,只是熟悉了一下并行接口的工作原理,用的的芯片业非常简单。

北京邮电大学微机原理与接口技术软件件实验报告

北京邮电大学微机原理与接口技术软件件实验报告

北京邮电大学微机原理与接口技术软件件实验报告信息与通信工程学院微机原理软件实验报告班级:学号:姓名:序号:时间:2015-11-6——2015-11-29实验二分支,循环程序设计一、实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的 DOS 功能调用.二、实验内容:1.安排一个数据区(数据段),内存有若干个正数,负数和零.每类数的个数都不超过 9。

2.编写一个程序统计数据区中正数,负数和零的个数。

3.将统计结果在屏幕上显示。

4.(选做)统计出正奇数,正偶数,负奇数,负偶数以及零的个数。

三、预习题:1、十进制数 0 -- 9 所对应的 ASCII 码是什么? 如何将十进制数 0 -- 9 在屏幕上显示出来?答:十进制数0——9对应的二进制数为30H——39H。

要屏显0-9的数码,只需将AH置成02H(DOS功能调用),然后将要显示的数码的ASCII码存进DL里,然后执行INT 21H就可以打印字符。

或者,若这些数码是以字符串的格式存储,则可以将AH置成09H,(最后以’$’字符结束,)然后将串首地址传给DS,然后执行INT 21H就可以打印字符串。

2、如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?答:可以将待检验数与0比较(使用CMP 指令后用JZ指令判断ZF是否为零),也可以将待检验数与80H相与,判断ZF的值。

二是和0相比是否相等,然后用该数(假设为8位)和10000000相与,取出符号位判断,可区分正负。

本次试验中我使用的方法是与0比较,所有判决方法的核心思想要么是直接和0相比,要么使用逻辑或移位运算,取出符号进行判断。

四、实验过程:流程图:是代码:DATA SEGMENT ;数据段BUFF DW4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,2 2 ;待判断数据COUNT EQU $-BUFF ;COUNT的值为BUFF所占的字节数POSI DB ? ;正数ZERO DB ? ;负数NEGT DB ? ;0 POSIEVEN DB 0 ;正偶数POSIODD DB ? ;正奇数NEGTEVEN DB 0 ;负偶数NEGTODD DB ? ;负奇数POSICHAR DB 'Positive: $' ;用于打印提示的字符串定义NEGTCHAR DB 'Negtive: $'ZEROCHAR DB 'Zero: $'EVENCHAR DB ' Even: $'ODDCHAR DB ' Odd: $'CR DB 0DH,0AH,'$' ; 回车换行的ASCII码DATA ENDSSTACK SEGMENT STACK 'STACK' ;堆栈段DB 100 DUP(?)STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK BEGIN:PUSH DSXOR AX,AXPUSH AX ;返回DOSMOV AX,DATAMOV DS,AX ;给DS真正赋值MOV CX,COUNTSHR CX,1 ;相当于除2, 正好为BUFF中的数据个数MOV DX,0 ;设定初值:DH及DL分别为等于、大于零的个数MOV AH,0 ;设定初值:AH为小于零的个数LEA BX,BUFF ;把BUFF中的第一个数存到BXAGAIN: CMP WORD PTR [BX],0 ;BUFF中的第一个数与0进行比较JGE POSITIVE ;大于等于0时转POSITIVEINC AH ;统计小于零的个数ADD WORD PTR [BX],1 AND NEGTEVEN,[BX] ;和1与之后的结果加到负偶数中JMP NEXTPOSITIVE: JZ Z ERO ;等于0时转ZERO INC DL ;统计大于零的个数ADD WORD PTR [BX],1 AND POSIEVEN,[BX] ;和1与之后的结果加到正偶数中JMP NEXTZERO: INC DH ;统计等于零的个数NEXT INC BX ;修改地址指针INC BXLOOP AGAIN ;循环判断CX不为0MOV POSI,DL ;保存结果,正数MOV ZERO,DH ;0MOV NEGT,AH ;负数MOV AH,POSIMOV AL,POSIEVENSUB AH,AL ;计算正奇数个数MOV POSIODD,AHMOV AH,NEGTMOV AL,NEGTEVENSUB AH,ALMOV NEGTODD,AH ;计算负奇数个数PRINT: ;打印正数提示符和正数(奇偶)个数MOV AH,09HMOV DX,OFFSET POSICHARINT 21HMOV AH,02HMOV DL,POSIADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET EVENCHARINT 21HMOV AH,02HMOV DL,POSIEVENADD DL,30HINT 21HMOV AH,09HINT 21HMOV AH,02HMOV DL,POSIODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21H;打印负数提示符和负数(奇偶)个数MOV AH,09HMOV DX,OFFSET NEGTCHARINT 21HMOV AH,02HMOV DL,NEGTADD DL,30HINT 21HMOV AH,09HINT 21HMOV AH,02HMOV DL,NEGTEVENADD DL,30HINT 21HMOV AH,09HMOV DX,OFFSET ODDCHARINT 21HMOV AH,02HMOV DL,NEGTODDADD DL,30HINT 21HMOV DX,OFFSET CRMOV AH,09HINT 21HMOV AH,09HMOV DX,OFFSET ZEROCHARINT 21HMOV AH,02HMOV DL,ZEROADD DL,30HINT 21HCODE ENDSEND BEGIN ;代码段结束结果分析:数据区待统计的数据为:4,0,37,99,-9,-2,-87,0,76,11,0,-34,-11,0,22实验结果如下图所示:本实验意在练习基本的分支、循环结构。

北邮-微原硬件实验报告

北邮-微原硬件实验报告

北邮-微原硬件实验报告实验简介本次实验是北邮电子工程学院微型原子核物理实验课程的一部分。

本次实验主要分为两个部分:微原硬件实验和样品制备。

微原硬件实验主要是为了让学生了解硬件实验的基本原理,掌握硬件实验的基本方法。

硬件实验实验目的通过控制硬件实验,观察不同磁场下的原子核的运动状态,进而了解原子核的物理性质。

实验器材•微原硬件实验仪•托盘•荧光屏•操作盘实验步骤1.将托盘放置在荧光屏上,打开微原硬件实验仪的电源2.打开荧光屏开关,将光电倍增管插在荧光屏上的孔中3.打开操作盘,选择相应的磁场模式,如顶置模式,圆柱模式或平面模式4.将操作盘连接到电磁铁上,并按照实验要求进行调节5.打开微原硬件实验仪的数据采集系统,并进行数据采集6.根据数据采集结果进行数据处理和分析实验结果通过微原硬件实验,我们得到了不同磁场下原子核的运动状态。

我们可以通过观察数据采集结果和数据处理结果来了解原子核的物理性质。

例如,我们可以通过分析数据来计算原子核大小、电荷等参数。

样品制备实验目的通过样品制备,让学生了解样品制备过程中的化学和物理原理,掌握样品制备的基本方法。

实验器材•称量器•毛细管•乙酸钠•氯化钠•离心机•离心管实验步骤1.称取适量的乙酸钠和氯化钠2.将乙酸钠和氯化钠加入样品瓶中3.加入适量的水,使溶液中的浓度达到一定的比例4.将样品瓶放入离心机中进行离心分离5.取出离心管中的上层溶液,放入样品瓶中实验结果通过样品制备,我们制备出了一种可以用于微原硬件实验的样品。

我们可以对样品进行计算、分析和测试,以便我们更好地了解原子核的物理性质,并探索原子核在各种磁场下的运动状态。

北邮电子钟设计课程设计

北邮电子钟设计课程设计

北邮电子钟设计课程设计一、课程目标知识目标:1. 学生能理解电子钟的基本原理,掌握电子钟的核心组成部分及其功能。

2. 学生能掌握数字电路的基础知识,并能运用所学设计简单的电子钟电路。

3. 学生了解时钟芯片的工作原理,能够正确编程设置时钟参数。

技能目标:1. 学生能够运用所学知识,设计并搭建一个功能完整的电子钟。

2. 学生能够通过编程实现对电子钟的精准时间控制,具备一定的调试和故障排除能力。

3. 学生能够撰写实验报告,总结电子钟设计过程中的关键步骤和问题。

情感态度价值观目标:1. 学生培养对电子科学的兴趣,增强创新意识和实践能力。

2. 学生在团队合作中学会沟通与协作,培养解决问题的能力和责任心。

3. 学生通过电子钟设计课程,认识到科技发展对生活的影响,增强社会责任感。

课程性质:本课程为实践性课程,以项目为导向,结合理论教学和动手实践,培养学生的实际操作能力和创新思维。

学生特点:学生为高中年级,具备一定的物理和数学基础,对电子技术有一定了解,但缺乏实际操作经验。

教学要求:教师需结合课本知识,引导学生通过实际操作掌握电子钟设计方法,注重培养学生的动手能力和团队协作精神。

在教学过程中,关注学生的个体差异,鼓励学生自主探究和解决问题。

将课程目标分解为具体的学习成果,以便于教学设计和评估。

二、教学内容1. 电子钟原理概述:介绍电子钟的基本工作原理,电子时钟芯片的组成和功能,以及电子钟的典型应用。

- 相关教材章节:第3章“数字电路基础”,第4章“时钟电路及其应用”2. 数字电路基础知识:回顾与电子钟设计相关的数字电路基础知识,包括逻辑门、触发器、计数器等。

- 相关教材章节:第2章“逻辑门与组合逻辑电路”,第5章“时序逻辑电路”3. 时钟芯片编程与应用:学习时钟芯片的编程方法,掌握如何通过编程设置和调整电子钟的时间参数。

- 相关教材章节:第6章“时钟芯片及其应用”,第7章“微控制器基础”4. 电子钟设计与搭建:详细讲解电子钟的设计步骤,指导学生进行电路搭建和编程,实现一个功能完整的电子钟。

北邮通原软件实验报告

北邮通原软件实验报告

《通信原理软件》实验报告学院:信息与通信工程学院专业:通信工程姓名:学号:班级:班级序号:实验二时域仿真精度分析一、实验目的1. 了解时域取样对仿真精度的影响2. 学会提高仿真精度的方法二、实验原理一般来说,任意信号s(t)是定义在时间区间(-∞,+∞)上的连续函数,但所有计算机的CPU都只能按指令周期离散运行,同时计算机也不能处理(-∞,+∞)这样一个时间段。

为此将把s(t)按区间[-T/2,+T/2]截短为St(t).按时间间隔△t 均匀取样,得到的取样点数为N=T/△t仿真时用这个样值集合来表示信号s(t)。

△t 反映了仿真系统对信号波形的分辨率,△t越小则仿真的精确度越高。

据通信原理所学,信号被取样以后,对应的频谱是频率的周期函数,其重复周期是1/△t。

如果信号的最高频率为f H,那么必须有f H<=1/2△t才能保证不发生频域混叠失真,这是奈奎斯特抽样定理。

设Bs=1/2△t则称Bs为仿真系统的系统带宽。

如果在仿真程序中设定的采样间隔是△t,那么不能用此仿真程序来研究带宽大于Bs的信号或系统。

换句话说,就是当系统带宽一定的情况下,信号的采样频率最小不得小于2*Bs,如此便可以保证信号的不失真,在此基础上时域采样频率越高,其时域波形对原信号的还原度也越高,信号波形越平滑。

也就是说,要保证信号的通信成功,必须要满足奈奎斯特抽样定理,如果需要观察时域波形的某些特性,那么采样点数越多,可得到越真实的时域信号。

三、实验内容将模块按下图连接:参数设置:四、实验结果修改参数后结果为:五、思考题1. 观察分析两图的区别,解释其原因可以看出信号2的波形严重失真,这是因为第二次的时钟设置是0.3,第一次的时钟设置是0.01;在第一次的时候,信号的采样频率是f=1/t=1/0.01=100,每秒采样点数为100;第二次的采样频率为f=1/0.3=33.3,每秒采样点数严重减少为33.3个;而由奈奎斯特抽样定理知道,这个采样频率必须满足以下条件:fH<=1/2△t此时,根据计算可知,真实fH = 20hz,fH1=50hz,fH 2=0.5*33.3,约为16.6. 故信号失真了。

北邮微原软件实验报告

北邮微原软件实验报告

北邮微原软件实验报告微原软件实验报告班级:2009211119 班学号:09210550班内序号:07姓名:胡易实验二分支,循环程序设计一.实验目的:1.开始独立进行汇编语言程序设计;2.掌握基本分支,循环程序设计;3.掌握最简单的DOS 功能调用.二.实验内容:1.安排一个数据区,内存有若干个正数,负数和零.每类数的个数都不超过9.2.编写一个程序统计数据区中正数,负数和零的个数.3.将统计结果在屏幕上显示.三.开BUFF偏移地址[BX]是否大于等于0 ah=ah +1[BX]是否DL=DL+1 (大否dh=dh+1 否BX值加判断完所否是显示结四.源程序data segmentbuff dw 22,11,33,0,55,-11,-32,-45,-56,123,-121count equ $-buffplus db ? ;大于0的个数zero db ? ;等于0的个数minus db ? ;小于0的个数string1 db 'zhengshu:','$'string2 db 'fushu:','$'string3 db '0:','$'data endsstack segment stack'stack'db 100 dup(?)stack endscode segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,axmov cx,countshr cx,1mov dx,0mov ah,0mov bx,offset buffagain: cmp word ptr [bx],0jge plu ;判断是否大于等于0,是就跳转inc ah ;小于0的个数加1jmp nextplu: jz zer ;判断是否等于0.是就跳转inc dl ;大于0的个数加1jmp nextzer: inc dh ;等于0的个数加1next: inc bxinc bx ;修改指针地址loop againmov plus,dl ;将大于0,小于0,等入0个数存入mov zero,dhmov minus,ahcall show1 ;显示最终结果call show2call show3mov ax,4c00hint 21hshow1 proc near ;显示大于0的数push dxmov ah,09hmov dx,seg string1mov ds,dxmov dx,offset string1int 21hmov al,plusadd al,'0'-0hmov ah,02hmov dl,alint 21hmov dl,0ahint 21hpop dxretshow1 endpshow2 proc near ;显示小于0的数push dxmov ah,09hmov dx,seg string2mov ds,dxmov dx,offset string2int 21hmov al,minusadd al,'0'-0hmov ah,02hmov dl,alint 21hmov dl,0ahint 21hpop dxretshow2 endpshow3 proc near ;显示等于0的数push dxmov ah,09hmov dx,seg string3mov ds,dxmov dx,offset string3int 21hmov al,zeroadd al,'0'-0hmov ah,02hmov dl,alint 21hmov dl,0ahint 21hpop dxretshow3 endpcode endsend start五.程序运行结果六.预习题1.十进制数0 -- 9 所对应的ASCII 码是什么? 如何将十进制数0 -- 9 在屏幕上显示出来?0-9的ascii码为,30h,31h,32h,34h,35h,36h,37h,38h,39h,将要显示的数加上30h,得到该数的ascii码,再利用DOS功能调用显示单个字符2.如何检验一个数为正,为负或为零? 你能举出多少种不同的方法?利用cmp指令,利用TEST指令,将该数与0相减,观察标志位。

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

微机原理软件实验报告班级:201321112#专业:信息工程姓名:学号:2013210###你们就猜吧!该代码修复了不按回车就跑动和时间跳变问题,最重要的是流程图也改了。

业界良心啊!!一、实验内容编一程序,在显示器上显示时、分、秒。

借用计数器8253的Timer0作为中断源,通过8259A向CPU发中断,每10ms产生一次中断。

在中断服务程序中管理刷新时、分、秒。

要求:1、输入文件名(如:CLK)后清屏后显示:2、Current time is: xx:xx:xx(时分秒键盘输入)3、打回车,时、分、秒开始计时。

时钟不停的刷新。

4、当键入CTRL+C时,停止计时,返回系统,且系统正常运行不死机。

8253的初始化程序段可借用。

口地址为40H、41H、42H、43H,控制字为36H=00110110B,时间常数TC=11932:1.1932MHz/11932=100Hz,输出方波频率为100Hz,其周期为1000/100=10ms。

二、设计思路程序流程图是中断子程序流程图子程序开始记下进入中断的次数判断次数是否为100是计数清零,修改内存中存储的时间查看是否有进位进位调整结束否1、计数器芯片8253简介①初始化使用8253前,要进行初始化编程。

初始化编程的步骤是:1.向控制寄存器端口写入控制字对使用的计数器规定其使用方式等。

2.向使用的计数器端口写入计数初值。

②8253控制字D7D6=00:使用0号计数器,D7D6=01:使用1号计数器D7D6=10:使用2号计数器,D7D6=11:无效D5D4=00:锁存当前计数值D5D4=01:只写低8位(高8位为0),读出时只读低8位D5D4=10:只写高8位(低8位为0),读出时只读高8位D5D4=11:先读/写低8位,后读/写高8位计数值D3D2D1=000:选择方式0,D3D2D1=001:选择方式1D3D2D1=X10:选择方式2,D3D2D1=X11:选择方式3D3D2D1=100:选择方式4,D3D2D1=101:选择方式5D0=0:计数初值为二进制,D0=1:计数初值为BCD码数三、运行效果图开始画面输入时间开始跑动T秒表功能正常退出四、程序源码data segmentcount100 db 100 ;100个10ms=1s,此处count100起计数作用msg1 db 'Current time is:$'msg2 db 'Sorry,your date entered incorrectly ,please try again!$'msg3 db'Now, the time is:',0ah,'(Press Ctrl+C to EXIT.)',0ah,'(Press T to use as a Stopwatch.)$' msg4 db 0ah,'Program EXIT normally.$'tenhour db '0' ;小时十位数hour d b '0',':' ;小时个位数tenmin db '0' ;分钟十位数minute db '0',':' ;分钟个位数tensec db '0' ;秒十位数second db '0' ;秒个位数data endsstack segment stack 'stack'db 256 dup(0)stack endscode s egmentassume cs:code,ds:data,es:datastart: movax,seg datamoves,axmovds,axmovdx,offset msg1 ;打印提示信息1mov ah,09hint 21hsettime:movsi,offsettenhour ;设定时间mov ah,01h ;键盘输入int 21hcmp al,0dhjz forever1cmp al,'0'jc error2 ;如果输入不合法,报错cmp al,'3'jnc error2 ;如果输入不合法,报错mov [si],alincsicmp al,'2'jzershimov ah,01h ;如果小时高位为1,低位可以设置0~9 int 21hcmp al,0dhjz forever1cmp al,'0'jc error2cmp al,'9'+1jnc error2mov [si],alincsijmp fenershi: mov ah,01h ;如果小时高位为2,低位可以设置0~4 int 21hcmp al,0dhjz forever1cmp al,'0'jc error2cmp al,'4'jnc error2mov [si],alincsijmp fenfen: mov ah,01hint 21hcmp al,0dhjz forever1cmp al,':'jnz error1mov [si],alincsimov ah,01h ;分的高位可设置0~5int 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'6'jnc error1mov [si],alincsimov ah,01h ;分的低位0~9int 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'9'+1jnc error1mov [si],alincsijmpmiaosettime2:jmp settime ;跳转接力,段内转移的距离限制error2: jmp error1forever1:jmp next2miao: mov ah,01h ; “:”的检测int 21hcmp al,0dhjz forever1cmp al,':'jnz error1mov [si],alincsimov ah,01h ;秒的高位可设置0~5int 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'6'jnc error1mov [si],alincsimov ah,01h ;秒的低位可设置0~9int 21hcmp al,0dhjz forever1cmp al,'0'jc error1cmp al,'9'+1jnc error1mov [si],almov ah,01hint 21hcmp al,0dhjz next2error1: mov dl,0ah ;用来报错:设置时间不合法mov ah,02hint 21hmovdx,offset msg2 ;打印提示信息2mov ah,09hint 21hmov dl,0ahint 21hjmpsettimesettime3: jmp settime2 ;同上next2: MOV AX,0003H ;做时钟显示初始化INT 10H ;清屏显示mov dl,0ahmov ah,02hint 21hmovdx,offset msg3 ;打印提示信息3mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hcli ;使中断标志IF=0mov al,8 ;保存源中断向量mov ah,35hint 21hpush espush bxmov ax,0moves,ax ; es置零,准备中断向量的写入mov di,20hmovax,offset Timer0 ;中断子程序timer的偏移量stosw ;字符串填充,将AX的内容存入di所指向的单元默认段基址总是ES movax,csstosw ;timer基址填充;------------------8253设置-------------------------mov al,36hout 43h,al ;设置8253控制字为36Hmov bx,11932 ;分频系数为11932,分频结果1.1932MHz/11932=100Hz,10ms变化一次moval,bl ;分两次设置分频系数out 40h,almoval,bhout 40h,al;------------------8253设置-------------------------mov al,0fch ;主PIC端口设置为0fchsti ;开中断,允许外部中断forever:movbx,offsettenhour ;这个程序段循环执行mov cx,8dispclk:mov dl,[bx] ;用来显示当前时间call dispcharincbxloop dispclk ;调用显示子程序,显示初始状态时间mov dl,0dh ;输出一个换行call dispcharxoral,al ;读键盘缓冲区mov ah,0bhint 21hcmp al,0FFHjnz next3mov ah,08h ;取其字符int 21hcmp al,03h ;Ctrl+C退出jz stopcmp al,54hjnz next3 ;无输入情况下,循环修改时间mov dl,0ah ;“T”则使用秒表功能mov ah,02hint 21hjmp forevernext3: moval,secondnext: cmpal,second ;判断second是否发生变化je next ;如果没有,循环比较jmp forever ;如果有变化,刷新输出stop: movdx,offset msg4 ;打印提示信息4mov ah,09hint 21hmov dl,0ahmov ah,02hint 21hpop dx ;恢复中断向量pop dsmov al,8mov ah,25hmov ah,4chint 21hTimer0 proc far ;中断程序timerpush axdec count100 ;计数100次jnztimerx ;如果计数小于100,跳出中断mov count100,100 ;否则重置count100<=100;1s已经到达inc second ;加一秒cmp second,'9' ;判断大小,用于进位,以下原理相同jletimerxmov second,'0'inctenseccmp tensec,'6'jltimerxmov tensec,'0'inc minutecmp minute,'9'jletimerxmov minute,'0'inctenmincmp tenmin,'6'jltimerxmov tenmin,'0'inc hourcmp hour,'9'ja adjhourcmp hour,'4'jnztimerxcmp tenhour,'2'jnztimerxmov hour,'0'mov tenhour,'0'jmp short timerx ;段内短转移adjhour:inctenhourmov hour,'0'timerx: mov al,20hout 20h,al ;主PIC口地址pop ax ;出栈恢复iret ;中断返回Timer0 endpdispcharproc near ;显示子函数push bxmov bx,0mov ah,02hint 21h ;DOS功能调用,输出DL内容pop bxretdispcharendpcode e ndsend star五、子程序清单子程序名:dispchar功能:显示dl中的字符所用寄存器:dl,bx,ah入口参数:dl存放的内容出口参数:无中断服务程序名:Timer0功能:刷新时间所用寄存器:ax入口参数:预订中断出口参数:时间参数。

相关文档
最新文档