微机原理大作业
微机原理程序设计大作业-2011

微机原理与程序设计大作业----汇编语言程序设计方法1. 试编写一个程序,要求能从键盘接收一个个位数N,然后响铃N次(响铃的ASCⅡ码为07)。
2. 从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并将计数值显示在屏幕上。
3. 试编写一个程序,要求比较数组ARRAY中的三个16位补码数,并根据比较结果在屏幕上显示如下信息:(1) 如果三个数都不相等则显示0;(2) 如果三个数有二个相等则显示1;(3) 如果三个数都相等则显示2。
4. 从键盘输入一系列字符(以回车符结束),并按字母、数字及其它字符分类计数,最后显示出这三类计数结果。
5. 假设已经编制好5个歌曲程序,它们的段地址和偏移地址存放在数据段的跳转表SINGLIST中,试编制程序,根据从键盘输入的歌曲编号1~5,转去执行五个歌曲程序中的一个。
6. 试编制一个程序,把AX中存放的16进制数转换为ASCII码,并将对应的ASCII码依次存放在MEM数组中的四个字节中。
例如:当(AX)= 2A49H时,程序执行完后,MEM中的四个字节的内容为39H,34H,41H,32H。
7. 设有10个学生的成绩分别是76,69,84,90,73,88,89,63,100,80分,试编制一个子程序统计60~69分,70~79分,80~89分,90~99分及100分的人数,放在S6,S7,S8,S9和S10单元中。
8. 编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示出来。
主程序TELIST:∙显示提示符INPUT NAME:;∙调用子程序INPUT_NAME输入姓名;∙显示提示符INPUT A TELEPHONE NUMBER:;∙调用子程序INPUT_PHONE输入电话号码;∙调用子程序PRINT_LINE显示姓名及电话号码。
子程序INPUT_NAME:∙调用键盘输入子程序GET_CHAR,把输入的姓名放在INBUF缓冲区中;∙把INBUF中的项目移入输出行OUT_NAME中。
南京邮电大学微机原理作业

斜体下划线部分可跳过
用户定义的中断服务程序有两个设计方法:
①定义用户中断服务程序为“71H型”
②定义用户中断服务程序为“0AH型”
用户中断服务程序结束
①若用户中断定义为0AH型,服务程序结束前只向主8259送结束命令
5.用系统机串行口采用中断方式完成字符发送和接收,编程时应采取哪些措施?
答:⑴中断允许寄存器相应位置1
⑵MODEM控制寄存器 ,即 打通8250的中断请求通道。
⑶8259相应中断屏蔽位置0(主8259 、 )— 8259
⑷CPU处于开中断(STI)— CPU
6.A、B两台PC机利用主串口进行点-点单工通信(不用联络线),发送采用查询方式,接收采用中断方式。一帧字符包含7个数据位,1个停止位,1个校验位,通信速率为4800波特(分频系数为0018H)。
STI;开中断
SCAN:MOVAH, 01H;设置功能号
INT16H;有键入?
JZSCAN;否循环
CALLRESET;恢复现场
MOVAH, 4CH
INT21H
;--------------------------------------
SERVICEPROC
PUSHA
PUSHDS;保护现场
MOVAX, DATA
MESGDB'Welcome!','$';显示的字符串
DATAENDS
CODESEGMENTUSE16
ASSUMECS:CODE, DS:DATA
BEG:MOVAX, DATA
MOVDS, AX
CLI;关中断
CALLI8259;8259初始化
微机原理作业及参考答案

第一章计算机基础(P32)1-1电子管,晶体管,中小规模集成电路、大规模、超大规模集成电路。
1-2把CPU和一组称为寄存器(Registers)的特殊存储器集成在一片大规模集成电路或超大规模集成电路封装之中,这个器件才被称为微处理器。
以微处理器为核心,配上由大规模集成电路制作的只读存储器(ROM)、读写存储器(RAM)、输入/输出、接口电路及系统总线等所组成的计算机,称为微型计算机。
微型计算机系统是微型计算机配置相应的系统软件,应用软件及外部设备等.1-3写出下列机器数的真值:(1)01101110 (2)10001101(3)01011001 (4)11001110答案:(1)+110 (2)-13(原码) -114(反码)-115(补码)(3)+89 (4)-78(原码)-49(反码)-50(补码)1-4写出下列二进制数的原码、反码和补码(设字长为8位):(1)+010111 (2)+101011(3)-101000 (4)-111111答案:(1)[x]原=00010111 [x]反= 00010111 [x]补= 00010111(2)[x]原=00101011 [x]反= 00101011 [x]补= 00101011(3)[x]原=10101000 [x]反= 11010111 [x]补= 11011000(4)[x]原=10111111 [x]反= 11000000 [x]补=110000011-5 当下列各二进制数分别代表原码,反码,和补码时,其等效的十进制数值为多少?(1)00001110 表示原码14,反码14,表示补码为14(2)11111111 表示原码-127,反码-0,表示补码为-1(3)10000000 表示原码-0,反码-127,表示补码为-128(4)10000001 表示原码-1,反码-126,表示补码为-1271-6 已知x1=+0010100,y1=+0100001,x2=-0010100,y2=-0100001,试计算下列各式。
微机原理K60大作业

多功能电子时钟系统1、显示时间24小时制,可调时间,按*键后两位分钟数闪,表示可以调节(0键+,#键-),再按*键时钟闪,再次按下则表示时间调整完毕,2、Key2按下之后显示闹钟界面,同样可以调节,闹钟用LED1示意蜂鸣器强度,可以通过电位器调节。
调节时假设闹钟响(灯亮);再按key1回到时钟界面;当前时间与闹钟设置时间一样时,闹钟响(LED1亮)1分钟结束后熄灭。
3、Key3按下之后进入秒表界面,按1键开始/暂停,2键停止;3键返回时钟界面4、时间快捷修改法:Uart2电脑发给K60“12.12.12”可以精确修改时间到秒,同时显示修改后时间及当前闹钟设置值。
5、初始时间12.12.12,初始闹钟00.00,初始闹钟功能关闭,按下闹钟设置键(key2)闹钟功能开启;思路:1、Gpio :闹钟(LED1)(8)、时间LED2、(8+4)、uart2、按键1、2、3+闪+加+减2、按键:按键1、2、3+闪+加+减3、Uart2发送给电脑时间,电脑可以发送时间。
4、ADC电位器5、MCG时钟6、PIT0=1s,PIT1=5ms,PIT2闪7、Irq中断方式代码:#include"MK60D10.h"#include"adc.h"#include"irq.h"#include"xianshi.h"#include"uart.h"#include"xianshi.h"int shizhong=12,fenzhong=12,miaozhong=0;float voltage=0;int s[6]={0},n[4]={0};unsigned int table[10]={0x3F,0x06,0x5B,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; unsigned int ptb=0;unsigned int miaobiaom=0,miaobiaoms=0,m[4]={0};//Ãë±íunsigned char chs[6]={0},chn[4]={0};//²¢ËÍʱ¼äunsigned int i=0,j=0,ii=0;unsigned int key1sta=1,key2sta=1,key3sta=1,temp1,temp2,temp3,N=0;//pwmint pwm;//fasong¼ÆÊ±int fasong1s=0;//juzhengjianpanunsigned int bKeyTest=0;int panduan1=0;int jishu=0,panduanshan=0;//ÉÁÁÁvoid pit(void){SIM->SCGC6|=1<<23;PIT->MCR&=~0X2;//¶¨Ê±1sPIT->CHANNEL[0].LDVAL=48000000-1;PIT->CHANNEL[0].TCTRL|=0X03;enable_irq(68);//10MSPIT->CHANNEL[1].LDVAL=480000-1;PIT->CHANNEL[1].TCTRL|=0X03;enable_irq(69);//5msPIT->CHANNEL[2].LDVAL=120000-1;PIT->CHANNEL[2].TCTRL|=0X03;enable_irq(70);//0.2MSPIT->CHANNEL[3].LDVAL=9600-1;PIT->CHANNEL[3].TCTRL|=0X03;enable_irq(71);}void PIT0_IRQHandler(void ){PIT->CHANNEL[0].TFLG|=0x1u;//mÃë¼ÆÊ±miaozhong++;if(miaozhong>59){fenzhong++;miaozhong=0;}if(fenzhong>59){shizhong++;fenzhong=0;}if(fenzhong<0)fenzhong=59;if(shizhong>23){shizhong=0;}if(shizhong<0)shizhong=23;//Ãë¼ÆÊ±½áÊøs[0]=shizhong/10;s[1]=shizhong%10;s[2]=fenzhong/10;s[3]=fenzhong%10;s[4]=miaozhong/10;s[5]=miaozhong%10;n[0]=naozhongs/10;n[1]=naozhongs%10;n[2]=naozhongf/10;n[3]=naozhongf%10;for(i=0;i<6;i++)chs[i]=s[i]+'0';for(i=0;i<5;i++)chn[i]=n[i]+'0';if(panduan1){//²¢ËÍʱ¼äuart2_putstring("the time is ");for(i=0,j=0;i<6;i++,j++){if(j==2||j==4) uart2_putchar('-');uart2_putchar(chs[i]);}uart2_putstring(" / the alarm clock is ");for(i=0,j=0;i<4;i++,j++){if(j==2) u art2_putchar('-');uart2_putchar(chn[i]);}uart2_putstring("\n");//²¢ËÍÍê³Épanduan1=0;}}void PIT1_IRQHandler(void ) //10ms{PIT->CHANNEL[1].TFLG|=0x1u;if(model==3&&model3_1){miaobiaoms++;if(miaobiaoms==100){miaobiaom++;miaobiaoms=0;}}m[0]=miaobiaom/10;m[1]=miaobiaom%10;m[2]=miaobiaoms/10;m[3]=miaobiaoms%10;//°´¼üN++;if(N%5==0){TestKey();//juzhengjianpan}if(N%2==0){temp1=PTE->PDIR;temp1&=(1<<26);if((key1sta&&(!temp1))) //ʱÖÓKEY1{if(model!=3) model=1;else {model3_1=~model3_1;}}if(temp1) key1sta=1;else key1sta=0;//temp2=PTE->PDIR;temp2&=(1<<25);if(key2sta&&(!temp2)) //ÄÖÖÓ{if(model!=3) { model=2;naozhongkai=1;}else {model3_2=0;model3_1=0;}if(model3_2==0){miaobiaom=0;miaobiaoms=0;model3_2=1;}}if(temp2) key2sta=1;else key2sta=0;//temp3=PTE->PDIR;temp3&=(1<<24);if(key3sta&&(!temp3)) //Ãë±íKEY3{if(model!=3){model=3;model3_1=0;model3_2=1;}else {model=1; }}if(temp3) key3sta=1;else key3sta=0;}//uart²¢ËÍʱ¼äif(panduan){shizhong=(UART2_RecBuf[0]-48)*10+UART2_RecBuf[1]-48;fenzhong=(UART2_RecBuf[3]-48)*10+UART2_RecBuf[4]-48;miaozhong=(UART2_RecBuf[6]-48)*10+UART2_RecBuf[7]-48-1;panduan=0;panduan1=1;}}void PIT2_IRQHandler(void ) //2.5ms4¶ÎÊýÂë¹ÜÏÔʾ{PIT->CHANNEL[2].TFLG|=0x1u;voltage=3.3*adc0_convert()/4095;naozhong();PTB->PDOR&=~0Xf;PTB->PDOR|=1<<ptb;PTB->PDOR|=0xff<<16;if(model==1){if(ptb==0&&panduanshan!=2) PTB->PDOR&=~(table[s[0]]<<16);if(ptb==1&&panduanshan!=2) PTB->PDOR&=~((table[s[1]]|(0x01<<7))<<16);if(ptb==2&&panduanshan!=1) PTB->PDOR&=~(table[s[2]]<<16);if(ptb==3&&panduanshan!=1) PTB->PDOR&=~(table[s[3]]<<16);}if(model==2){if(ptb==0&&panduanshan!=2) PTB->PDOR&=~(table[n[0]]<<16);if(ptb==1&&panduanshan!=2) PTB->PDOR&=~((table[n[1]]|(0x01<<7))<<16);if(ptb==2&&panduanshan!=1) PTB->PDOR&=~(table[n[2]]<<16);if(ptb==3&&panduanshan!=1) PTB->PDOR&=~(table[n[3]]<<16);}if(model==3){if(ptb==0&&panduanshan!=2) { PTB->PDOR&=~(table[m[0]]<<16); }if(ptb==1&&panduanshan!=2) PTB->PDOR&=~((table[m[1]]|(0x01<<7))<<16);if(ptb==2&&panduanshan!=1) PTB->PDOR&=~(table[m[2]]<<16);if(ptb==3&&panduanshan!=1) PTB->PDOR&=~(table[m[3]]<<16);}ptb++;if(tiaozheng1!=0){if(jishu>=9)if(ptb==2||ptb==3){if(tiaozheng1%2!=0) panduanshan=1;else panduanshan=2;if(jishu>=18) {jishu=0;panduanshan=0;}}}else panduanshan=0;if(ptb>3) {ptb=0;jishu++;}}void PIT3_IRQHandler(void )//ÄÖÖÓÏÔʾ{pwm=voltage*100/3.3;PIT->CHANNEL[3].TFLG|=0x1u;if((naozhongL==1||model==2)&&model!=3){if(ii<pwm) PTC->PDOR&=~0xff;else PTC->PDOR|=0xff;ii++;if(ii==100) ii=0;}else PTC->PDOR|=0xff;}。
微机原理课程设计大作业

微机原理课程设计大作业一、课程目标知识目标:1. 让学生掌握微机原理的基本知识,包括计算机硬件组成、工作原理及性能指标。
2. 帮助学生理解并掌握汇编语言编程,能运用汇编语言实现基本的输入输出功能。
3. 让学生了解微机系统中的中断原理及其应用。
技能目标:1. 培养学生运用微机原理知识进行实际电路设计和分析的能力。
2. 培养学生独立完成汇编语言编程,实现微机控制相关功能的能力。
3. 提高学生运用所学知识解决实际问题的能力。
情感态度价值观目标:1. 培养学生对微机原理课程的兴趣,激发学生学习热情,增强学习主动性。
2. 培养学生具备团队合作精神,学会在团队中分工合作、共同解决问题。
3. 引导学生关注微机原理在科技发展中的应用,认识其在社会发展中的重要性。
课程性质:本课程为微机原理课程的实践环节,以大作业的形式进行,旨在培养学生的实践能力和创新能力。
学生特点:学生已具备一定的微机原理知识,具有一定的汇编语言编程基础,但实践能力有待提高。
教学要求:结合学生特点,注重理论与实践相结合,强调在实践中掌握知识,提高学生的实际操作能力和解决问题的能力。
将课程目标分解为具体的学习成果,以便于后续教学设计和评估。
二、教学内容本课程教学内容主要包括以下三个方面:1. 微机原理基础知识回顾:- 计算机硬件系统组成与工作原理- 微处理器结构及性能指标- 存储器层次结构与分类- 指令系统与寻址方式2. 汇编语言编程与实践:- 汇编语言基本语法与指令- 常用伪指令与宏指令- 程序结构与流程控制- 中断处理与中断服务程序编写3. 微机系统设计与分析:- 微机系统设计方法与步骤- 基本I/O接口电路设计- 中断控制器设计与实现- 微机控制系统综合设计教学大纲安排如下:1. 第一周:微机原理基础知识回顾2. 第二周:汇编语言编程与实践3. 第三周:微机系统设计与分析4. 第四周:大作业实践与指导教学内容与教材关联性说明:1. 教学内容与教材章节相对应,确保学生能够结合教材深入理解课程内容。
微机原理大作业

微机原理大作业本页仅作为文档页封面,使用时可以删除This document is for reference only-rar21year.March微机原理大作业基于8086最小方式系统总线完成电路设计及编程:1、扩展16K字节的ROM存储器,起始地址为:0x10000;2、扩展16K字节的RAM存储器,起始地址为:0xF0000;3、设计一片8259中断控制器,端口地址分别为:0x300,0x302;4、设计一片8253定时控制器,端口地址分别为:0x320,0x322,x324,0x326;5、设计一片8255并行接口,端口地址分别为:0x221,0x223,x225,0x227;6、设计外部连接电路实现通过8253每一秒钟产生周期中断信号,并利用该信号通过8259向8086处理器发送中断请求,利用该中断同步,8086处理器周期的从8255并行接口输入8位开关量的值,并存入到RAM的某个地址中。
7、请编写实现上述功能的完整的汇编程序代码,包括主程序及中断服务程序,在主程序中需要完成中断向量表的初始化(假定8259采用8086的30号中断进行同步,中断服务程序段的标号为:INT30_ISR),8259,8253(假定外部能有的时钟源为1MHz)及8255的初始化;在中断服务程序实现从8255中输入开关量并存储到RAM的某个地址中。
MODEL SMALL.DATACNT DB 0000HINT-TBL SEGMENT AT 0 ;中断向量表ORG 30*4DD INT30_ISRINT-TBL ENDAPORT EQU 221H ;8255地址BPURT EQU 223HCPURT EQU 225HCONTR EQU 227HTIME_1 EQU 320H ;8253地址TIME_2 EQU 322HTIME_3 EQU 324HCONTR_8253 EQU 326HMPORT0 EQU 300H ;8259地址MPORT1 EQU 302HRAM1 EQU 10000HRAM2 EQU F0000H.CODE.STARTUPMOV AL,90H ;定义8255A工作方式A组方式0输入MOV DX,CONTROUT DX,ALMOV AL,14H ;定义8253计数器0工作方式方式2MOV DX,CONTR_8253OUT DX,ALMOV AL,54H ;定义8253计数器1工作方式方式2 MOV DX,CONTR_8253OUT DX,ALMOV AL,94H ;定义8253计数器2工作方式方式2 MOV DX,CONTR_8253OUT DX,ALMOV AL,64H ;将外部能有的时钟源为1MHz转换为1s MOV DX,TIME_1OUT DX,ALMOV AL,64HMOV DX,TIME_2OUT DX,ALMOV AL,64HMOV DX,TIME_3OUT DX,ALLOOP1: JMP LOOP2 ;主程序进入无限循环,等中断LOOP2: JMP LOOP1.exit ;中断程序部分INT30_ISR:CLT ;8259A关中断MOV AL, 13H ;ICW1OUT MPORT0, ALMOV AL, 0C7H ;ICW2OUT MPORT1, ALMOV AL, 01HOUT MPORT1,ALMOV DX,APORTIN AL,DXCMP CNT,4000HJB CASE1CMP CNT,8000HJB CASE2JMP CASE3CASE1 MOV DX,CNT+RAM1 ;第一块RAM未写满OUT DX,ALJMP CNT_INCCASE2 MOV DX,CNT+RAM2-40000H ;第一块RAM写满,第二款RAM未写满OUT DX,ALJMP CNT_INCCASE3 MOV DX,RAM1 ;两块RAM写满OUT DX,ALMOV CNT,0JMP CNT_INCCNT_INC: INC CNTMOV DX,RAM1OUT DX,ALSTI ;开中断END。
微原大作业

微机原理与接口技术 ----大作业2016.6.24大作业:微处理器系统应用设计ARM微处理器系统32位数据总线(D31-D0)、32位地址总线(A31-A0)和控制线RD、WE、0BE和IRQ0。
要求存储器容BE、1BE、2BE、3量为1GB,其中ROM存储区512MB,从0x00000000开始的连续存储区,采用128MB ROM芯片;RAM存储区512MB,采用128MB SRAM 芯片,从0x20000000开始的连续存储区。
SRAM和ROM芯片通过总线与ARM微处理器系统相连;I/O接口为一片8282锁存器、一片七段数码管(共阴极)、一个按键,如下图所示;数码管通过8282锁存器与PA口相连,按键与ARM微处理器IRQ0相连。
每按一次键,通过中断方式在数码管显示其加1后的值(显示值为9时加1后显示0)。
数码管初值为本人学号的最后一位。
编写完成上述处理程序。
处理程序中采用子程序进行数码显示,中断方式实现按键处理,中断服务程序包括显示子程序。
IRQ0图8282锁存器接口图0-9数码管显示字样:要求:1、给出设计的RAM和ROM地址范围及必要说明;2、画出采用基本逻辑门(与、或、非门类)设计译码电路的微处理器总线与存储器连接图;3、画出完成上述处理程序流程图,并做必要的说明;4、程序从地址0x400处启动,给出完整处理程序清单,并有必要的注释。
一.ROM和RAM设计ROM区芯片个数:512M/128M=4片起始地址:0x00000000终止地址:0x1FFFFFFFROM芯片地址线:A[0:26]RAM区芯片个数:512M/128M=4片起始地址:0x20000000终止地址:0x3FFFFFFFRAM 芯片地址线:A[0:26]128MB = 134217728 B = B因此需要27位的地址总线访问存储器地址总线分配: A0~A26 作为存储器地址 A29 A28 A27 作为片选信号272二.电路图设计A29A30A31D[0:31]三.处理程序流程图四.处理程序清单Startup.s------------------------------------------------AREA RESET,CODEEXPORT __VectorsEXPORT Reset_Handler__VectorsDCD __initial_spDCD Reset_HandlerSPACE 14*4SPACE 6*4DCD EXTI0_HandlerReset_Handler PROCIMPORT EX4_EXTIldr r1,=EX4_EXTIbx r1B .ENDPEXTI0_Handler PROCIMPORT EXTI0_Cldr r1,=EXTI0_Cbx r1BX LRENDPAREA STACK,DATASPACE 0x100__initial_spENDMyhead.h---------------------------------------------------------------------- struct _RCC{IntCR;int CFGR;int CIR;int APB2RSTR;int APB1RSTR;int AHBENR;int APB2ENR;int APB1ENR;int BDCR;int CSR;};#define RCC ((volatile struct _RCC *)0x40021000)struct _GPIO{int CRL;int CRH;int IDR;int ODR;int BSRR;};#define GPIOB ((volatile struct _GPIO *)0x40010C00) #define GPIOA ((volatile struct _GPIO *)0x40010800)struct _USART{int SR;int DR;int BRR;int CR1;int CR2;int CR3;};#define USART1 ((volatile struct _USART *)0x40013800)struct _NVIC{int ISER[8];int rsv0[24];int ICER[8];int rsv1[24];int ISPR[8];int rsv2[24];int ICPR[8];int rsv3[24];int IABR[8];int rsv4[56];char IPR[240];int rsv5[644];int STIR;};#define NVIC ((volatile struct _NVIC *)0xE000E100)struct _BTIM{int CR1;int CR2;int rsv0;int DIER;int SR;int rsv1[4];int CNT;int PSC;int ARR;};#define TIM1 ((volatile struct _BTIM *)0x40012C00)struct _DMA_CH{int CCR;int CNDTR;int CPAR;int CMAR;int rsv;};struct _DMA{int ISR;int IFCR;struct _DMA_CH CH[7];};#define DMA1 ((volatile struct _DMA *)0x40020000) #define DMA2 ((volatile struct _DMA *)0x40020400)struct _AFIO{int EVCR;int MAPR;int EXTICR[4];int RESERVED0;int MAPR2;};#define AFIO ((volatile struct _AFIO *) 0x40010000)struct _EXTI{intIMR;int EMR;int RTSR;int FTSR;int SWIER;int PR;};#define EXTI ((volatile struct _EXTI *) 0x40010400 )Myfunction.c--------------------------------------------------------------------------------------------------- #include "Myhead.h"void RCC_Init(){RCC->APB2ENR|=((1<<3)|(1<<2)|(1<<0)); //PB PA AFIOGPIOB->CRL=0x88008; //设置PE3 PE4}void LED_Init(){GPIOA->CRL=0x33333333; //设置输出GPIOA->ODR|=(1<<5); //首先让数码管熄灭}void KEY_Init(){GPIOB->CRL=0x8; //按键设置GPIOB->ODR=0;}void AFIO_Init(){AFIO->EXTICR[0]=0x1; //PB0 TO EXTI0}void EXTI_Init(){EXTI->IMR=0x1; // EXTI0 使能EXTI->FTSR=0x1; // EXTI0 增加}void EXTI_Clear(){EXTI->PR=0x1; // EXTI0 除能}void NVIC_Init(){NVIC->ISER[0]=0xFFFFFFFF; // EXTI0 使能}void LED_Start(){GPIOA->ODR = 0xB6; //显示我的号尾数5 }void LED_On(){int t;t=GPIOA->ODR;if(t==0xFC) GPIOA->ODR=0x60; //0->1if(t==0x60) GPIOA->ODR=0xDA; //1->2if(t==0xDA) GPIOA->ODR=0xF2; //2->3if(t==0xF2) GPIOA->ODR=0x66; //3->4if(t==0x66) GPIOA->ODR=0xB6; //4->5if(t==0xB6) GPIOA->ODR=0xBE; //5->6if(t==0xBE) GPIOA->ODR=0xE0; //6->7if(t==0xE0) GPIOA->ODR=0xFE; //7->8if(t==0xFE) GPIOA->ODR=0xF6; //8->9if(t==0xF6) GPIOA->ODR=0xFC; //9->0}void EXTI0_C(){LED_On();}int EX4_EXTI(){RCC_Init();LED_Init();KEY_Init();AFIO_Init();EXTI_Init();NVIC_Init();for(;;){}return 0; }。
8086微机原理作业

8086微机原理作业作业要求:1. 我把这学期所有作业都发给大家,大家只要完成每周老师讲到的地方即可。
作业不是按次数做,只要是讲过的都要写。
2. 每周一上午精密仪器课前将作业交至我这边,下午微机课我交给老师。
3. 要求准备两本作业本,老师要求必须是本子,不能交纸片。
第一次作业:2.1 8080/8086CPU指令队列的作用是什么?,为什么指令队列可以提高微处理器的执行速度?2.2 在存储器中存放的数据如题图2.1所示。
试读出75422H和75424H字节单元的内容是什么?读出75422H和75424H字单元的内容是什么?2.3 段地址和偏移地址为1000H:117AH的存储单元的物理地址是什么?而1109H:00EAH或1025H:052AH的存储单元的物理地址又是什么?这说明了什么问题?2.4 在存储器分段结构中,每个段区最大可占用多少地址范围,为什么?如果在8086的机器中,若段间不允许重叠,那么最多可分多少个段区?2.5 如果从存储器的2000H地址开始分配段区,要求数据段占用lKB范围,堆栈段占用512B范围,代码段占用8KB范围。
按数据段、堆栈段和代码段的顺序连续分段,试画出存储器分段地址分配示意图,写明各段寄存器的内容? 2.6 简述8086 CPU总线读周期中的工作时序,并说明READY引脚作用?第二次作业:1、指出下列指令的源和目标操作数的寻址方式:①MOV ARRAY,BX②ADC CX,ALPHA[BX][SI]③AND GAMMA[DI],11011000B④INC BL⑤TEST ES:[SI],DX⑥SBB SI,[BP]2、现有DS;2000H,BX=0100H,SI=0002H,(20100H);12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21203H)=65H,试说明下列各条指令执行完后Ax寄存器的内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机大作业班级:学号:姓名:第一题:(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。
(2)按数字键“2”,完成在字符串中找最大值。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。
(3)按数字键“3”,完成输入数据组的排序。
用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。
(4)按数字键“4”,完成时间的显示。
首先提示用户对时,即改变系统的定时器HH:MM:SS(以冒号间隔,回车结束),然后在屏幕的右上角实时显示出时间:HH:MM:SS。
按任一键重新对时;按Esc键返回主菜单。
(5)按数字键“5”,结束程序的运行,返回操作系统。
运行结果:首先进入的首页:输入1输入字符串:安任意键后:Esc 键返回菜单:输入2:输入字符串:安任意键后Ese键返回菜单输入3输入若干数:按任意键:按Esc返回主菜单输入4安1修改时间输入修改时间:按任意键重做按Esc返回主菜单输入5退出程序代码:clear_screen macro op1,op2,op3,op4 ;清屏宏定义mov ah,06h ;当前显示页上卷mov al,00h;AL=上卷行数,0 为清屏mov bh,07h;BH=填充字符属性mov ch,op1;CH/CL=上卷窗口左上角坐标mov cl,op2;mov dh,op3;DH/DL=上卷窗口右下角坐标mov dl,op4;int 10hmov ah,02h;置光标位置mov bh,00h;BH=显示页mov dh,00h;DH=行mov dl,00h;DL=列int 10hendmmenu macro op1,op2,op3 ;菜单显示宏定义mov ah,02h;置光标位置mov bh,00h;BH=显示页mov dh,op1;DH=行mov dl,op2;DL=列int 10hmov ah,09h;向屏幕显示一串字符以lea dx,op3 ;入口地址int 21hendmdata segmentSTRING11 DB '请输入字符串:$'STRING12 DB '结果:$'STRING22 DB '最大值:$'STRING31 DB '请输入0到255之间的若干数:$' STRING32 DB '新字符串:$'STRING33 DB '输入错误$'STRING41 DB '请验证时间……调整时间请按1$' STRING42 DB '请输入正确时间$'STRING43 DB '调整完毕$'STRING1 DB '1.Change lowercase to uppercase $' STRING2 DB '2.Find the maxmum $'STRING3 DB '3.Rank the array incrementally $' STRING4 DB '4.Display time $'STRING5 DB '5.return to operating system $' STRING DB '输入任意键,重新操作,Esc键退出$'KEY1 DB 100DB ?DB 100 DUP(?)NUMBUF DB 100DB ?DB 100 DUP(?)VAR DB 100 DUP(?)GAO DB 0CIGAO DB 0DIWEI DB 0SHU DB 0data endsstack segmentDW 100H DUP(?) ;input stack segment code here TOP LABEL WORDstack endscode segmentassume cs:code,ds:data,es:data,ss:stackstart:mov ax,datamov ds,axmov es,axmov ax,stackmov ss,axL1: lea sp,TOP ;input code segment code here clear_screen 00d,00d,24d,79dmenu 07h,15d,STRING1 ;输出主菜menu 09d,15d,STRING2menu 11d,15d,STRING3menu 13d,15d,STRING4menu 15d,15d,STRING5 ;mov ah,02h ;设置光标位置mov bh,00hmov dh,17dmov dl,15dint 10h ;mov ah,01h ;从键盘输入任意字符int 21hCMP AL,31HJZ L2CMP AL,32HJZ L3CMP AL,33HJZ L4CMP AL,34HJZ L5CMP AL,35HJZ L6L2: CALL CHLTOU ;11111111mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L2L3: CALL FINDMAX ;22222222mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L3L4: CALL RANK ;33333333mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L4L5: CALL DISPLAY ;44444444mov ah,01h ;从键盘输入任意字符int 21hCMP AL,1BHJZ L1JMP L5L6: mov ah,4chint 21hCHLTOU PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIclear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hLEA DX,STRING11 ;显示STRING11INT 21HMOV AH,0AH ;输入字符LEA DX,KEY1INT 21HLEA SI,KEY1+1XOR CX,CXMOV CL,[SI]INC SIL12:MOV AL,[SI]CMP AL,41HJB L11CMP AL,60HJB L11SUB AL,20HMOV [SI],ALL11:INC SILOOP L12MOV [SI+1],'$'CALL DISPCRMOV AH,09HLEA DX,STRING12INT 21HMOV AH,09HMOV DX,OFFSET KEY1+2INT 21HCALL DISPCRCALL DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HPOP SIPOP DXPOP CXPOP AXRETCHLTOU ENDPFINDMAX PROC NEARPUSH AXPUSH CXPUSH DXPUSH SIclear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hMOV AH,09HLEA DX,STRING11INT 21HMOV AH,0AHLEA DX,KEY1INT 21HLEA SI,KEY1+1XOR CX,CXMOV CL,[SI]INC SIDEC CXMOV BL,[SI]L22:CMP BL,[SI+1]JA L21XCHG BL,[SI+1]L21:INC SILOOP L22CALL DISPCRMOV AH,09HLEA DX,STRING22INT 21HMOV DL,BLMOV AH,02HINT 21HCALL DISPCRCALL DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HPOP SIPOP DXPOP CXPOP AXRETFINDMAX ENDPRANK PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIPUSH DIRESORT: clear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hMOV AH,09H ;显示LEA DX,STRING31INT 21Hcall DISPCRMOV AH,0AH;输入数据LEA DX,KEY1INT 21Hcall DISPCRCALL CIN_INT ; 字符串转换成数据串CMP AL, 0JZ RESORT ; 判断数据串是否有错CMP NUMBUF, 0JZ RESORT ; 判断数据串是否为空MOV AH,09H ;显示LEA DX,STRING32INT 21Hcall DISPCRCALL FAR PTR MPSORT ; 数据组排序CALL FAR PTR INT_OUT ; 数据组的输出call DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HPOP DIPOP SIPOP DXPOP BXPOP AXRETRANK ENDPCIN_INT PROC NEAR ; 读入整型数; 入口参数:无; 出口参数为:AL(有无错误标志,0为有,1为无)MOV CL, KEY1 + 1LEA SI, KEY1 + 2MOV CH, 0 ; 数据组数据个数置0MOV DH, 10MOV AL, 0 ; 当前数据x=0MOV DL, 0 ; 有无数据标志置0,即无数据FNDNUM:CMP BYTE PTR [SI], ' 'JZ ADDNUM ; 判断当前字符是否为空格CMP BYTE PTR [SI], '0'JB ERRNUMCMP BYTE PTR [SI], '9'JA ERRNUM ; 判断当前字符是否在'0'-'9'之间MOV DL, 1 ; 有无数据标志置1,即有数据MUL DHXOR BH, BHMOV BL, [SI]ADD AX, BXSUB AX, '0' ; 计算出当前数据xCMP AH, 0JA ERRNUM ; 判断x是否越界JMP NEXTADDNUM:CMP DL, 1JNZ NEXT ; 判断是否有数据INC CH ; 数据组数据个数加1CALL ADDNEWMOV DL, 0MOV AL, 0 ; 清零NEXT:INC SIDEC CLCMP CL, 0JNZ FNDNUM ; 依次检查各字符CMP DL, 1JNZ TOTAL ; 判断是否有未加入的数据INC CHCALL ADDNEWTOTAL:MOV NUMBUF, CH ; 置数据组数据个数MOV AL, 1 ; 输入数据无错误JMP CRTNUMERRNUM:MOV AL, 0 ; 输入数据有错误CRTNUM:RETCIN_INT ENDPADDNEW PROC NEAR ; 增加新数; 入口参数:CH(数据组数据个数)、AL(当前数据x); 出口参数:无PUSH AXLEA BX, NUMBUFMOV AL, CHCBWADD BX, AXPOP AXMOV [BX], ALRETADDNEW ENDPMPSORT PROC FAR ; 数据组排序MOV AL, NUMBUFCMP AL, 1JBE NOSORT ; 若只有一个元素,停止排序CBWMOV CX, AXLEA SI, NUMBUF ; SI指向数据组首地址ADD SI, CX ; SI指向数据组末地址DEC CX ; 外循环次数LP1: ; 外循环开始PUSH CXPUSH SIMOV DL, 0 ; 交换标志置0LP2: ; 内循环开始MOV AL, [SI]CMP AL, [SI - 1]JAE NOXCHGXCHG AL, [SI - 1] ; 交换操作MOV [SI], ALMOV DL, 1 ; 交换标志置1 NOXCHG:DEC SILOOP LP2POP SIPOP CXCMP DL, 1JNZ NOSORT ; 判断交换标志LOOP LP1NOSORT:RETMPSORT ENDPINT_OUT PROC FAR ; 输出数据组MOV AL, NUMBUFCBWMOV CX, AXMOV BL, 10HLEA SI, NUMBUF + 1PRINT:MOV AL, [SI]CALL OUTNUMINC SIMOV AH, 2MOV DL, ' 'INT 21HLOOP PRINTRETINT_OUT ENDPOUTNUM P ROC NEAR ; 将十进制数以十六进制输出; 入口参数:AL(待转换的数据),BL(转换进制数16); 出口参数:无MOV AH, 0DIV BLPUSH AXCMP AH, 10JB PNUMADD AH, 7PNUM: ADD AH, 30HMOV DL, AHPOP AXPUSH DXCMP AL, 0JZ OUTNCALL OUTNUMOUTN:POP DXMOV AH, 2INT 21HRETOUTNUM E NDPDISPLAY PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXPUSH SIclear_screen 0d,0d,23d,78d ;清屏宏调用mov ah,02h ;设置光标位mov bh,00hmov dh,01hmov dl,0hint 10hMOV AH,09H ;显示LEA DX,STRING41INT 21HCALL DISPLAY1CALL DISPCRMOV AH,01HINT 21HCMP AL,31HJZ L41JMP L42L41 : mov ah,02h ;设置光标位mov bh,00hmov dh,02hmov dl,0hint 10hMOV AH,09HLEA DX,STRING42INT 21HMOV AH,0AHLEA DX,KEY1INT 21HMOV BL,10MOV AL,KEY1 + 2SUB AL,30HSHL AL,1SHL AL,1SHL AL,1SHL AL,1ADD AL,KEY1 + 3SUB AL,30HCMP AL,0JB L42CMP AL, 24JAE L42 ; 判断时有效性MOV CH, ALMOV AL,KEY1+5SUB AL,30HSHL AL,1SHL AL,1SHL AL,1SHL AL,1ADD AL,KEY1+6SUB AL,30HCMP AL,0JB L42CMP AL,60JAE L42 ; 判断分有效性MOV CL, ALMOV AL,KEY1 + 8SUB AL, 30HSHL AL,1SHL AL,1SHL AL,1SHL AL,1ADD AL, KEY1 + 9SUB AL,30HCMP AL,0JB L42CMP AL,60JAE L42 ; 判断秒有效性MOV DH,ALMOV DL,0MOV AH,03H; 置系统时间INT 1AHmov ah,02h ;设置光标位mov bh,00hmov dh,03hmov dl,0hint 10hMOV AH,09HLEA DX,STRING43INT 21HCALL DISPCRCALL DISPCRMOV AH,09H ;显示LEA DX,STRINGINT 21HL42 :CALL DISPLAY1POP SIPOP DXPOP CXPOP BXPOP AXRETDISPLAY ENDPDISPLAY1 PROC NEAR ;显示系统时钟PUSH AXPUSH BXPUSH CXPUSH DX;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DISPI: MOV AH,2xor bh,bhMOV DX,0045H ;DX=CURSOR=45h,表示光标定位在1行70 列INT 10H ;int10 子功能02 设置光标位置MOV AH,2INT 1AHPUSH DXPUSH CXPOP BX ;小时分钟数给BXPUSH BXCALL SHOWBYTE ;调用子程序显示小时,小时在bh中CALL SHOWCOLON ;调用子程序显示时间分隔符":"POP BXXCHG BH,BL ;分钟给bhCALL SHOWBYTE ;调用子程序显示分钟,bh是分钟数CALL SHOWCOLON ;调用子程序显示时间分隔符":"POP BX ;秒数给bhCALL SHOWBYTE ;调用子程序显示秒?mov ah,02h ;设置光标位mov bh,00hmov dh,05hmov dl,0hint 10hMOV BX,0018HRE: MOV CX,0FFFFHREA: LOOP READEC BXJNZ REMOV AH,0BHINT 21HCMP AL,0JZ DISPIPOP DXPOP CXPOP BXPOP AXRETDISPLAY1 ENDPSHOWBYTE PROC NEAR ;BCD值显示子程序,BCD值在BH中BH CBWPUSH BX ;压栈BX值,以防冲掉MOV CL,4 ;以下代码BH中BCD十位值转ASCLL码MOV AL,BHSHR AL,CLADD AL,30HCALL SHOW ;调用子程序显示AL,当前AL为时间值十位上的数值CALL CURMOVE ;调用子程序后移光标POP BX ;还原BX值MOV AL,BH ;以下代码BH中BCD个位值转ASCLL码AND AL,0FHADD AL,30HCALL SHOW ;调用子程序显示AL,当前AL为时间值个位上的数值CALL CURMOVE ;调用子程序后移光标RETSHOWBYTE ENDPSHOWCOLON PROC NEAR ;显示字符":" 子程序,用于时间分隔符MOV AL,':'CALL SHOW ;调用子程序显示":"CALL CURMOVE ;调用子程序后移光标RETSHOWCOLON ENDPCURMOVE PROC NEAR ;光标后移子程序PUSH AXPUSH BXPUSH CXPUSH DXMOV AH,3MOV BH,0INT 10H ;取光标位置INC DL ;光标列位置加1MOV AH,2INT 10H ;设光标位置POP DXPOP CXPOP BXPOP AXRETCURMOVE ENDPSHOW PROC NEAR ;显示一个ASCLL字符子程序,AL为所显字符AL PUSH AXPUSH BXPUSH CXMOV AH,09HMOV BX,002fh ;BH/BL=字符背景色/字符颜色2fh=绿底白字MOV CX,1 ;显示个数1INT 10H ;int 10 子功能09 显示一个字符POP CXPOP BXPOP AXRETSHOW ENDPDISPCR PROC NEAR ;光标回车换行PUSH AXPUSH DXMOV AH,2HMOV DL,0AHINT 21HMOV AH,2HMOV DL,0DHINT 21HPOP DXPOP AXRETDISPCR ENDPcode endsend start第二题:8086微机系统设计,具体要求如下:1、8086工作在最小方式。