“微机原理与系统设计”课程大作业
- 格式:doc
- 大小:29.00 KB
- 文档页数:3
微机原理与程序设计大作业----汇编语言程序设计方法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中。
大作业2:8086微机系统设计,具体要求如下:1、8086工作在最小方式。
2、工作时钟频率为:5MHz。
3、系统地址总线形成用74LS373。
系统数据总线形成用74LS245。
4、外部扩充设计16KB程序存储器,芯片选用Intel2764,首地址从FC000H开始;外部扩充设计16KB数据存储器,芯片选用Intel6264,首地址从00000H开始。
5、外部扩充设计A/D电路,芯片选用ADC0809(或其他芯片);外部扩充设计D/A 电路,芯片选用DAC0832(或其他芯片)。
6、系统配置1片8255A可编程并行接口和1片8254/8253可编程定时器。
7、输入设备为4×5矩阵非编码键盘,输出设备为4位数码管显示器。
键盘与显示器接口芯片可选8255A或Intel8279或ZLG7289。
8、所有端口地址有自己分配,译码器选用74LS138。
9、电路设计在protel DXP或Altium Designer下完成。
10、电路仿真软件选用proteus。
大作业1:(上机题)编写程序实现下列5项功能,通过从键盘输入1~5进行菜单式选择:(1)按数字键“1”,完成将字符串中的小写字母变换成大写字母。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),变换后按下列格式在屏幕上显示:<原字符串>例如:abcdgyt0092<新字符串> ABCDGYT0092按任一键重做;按Esc键返回主菜单。
(2)按数字键“2”,完成在字符串中找最大值。
用户输入由英文大小写字母或数字0~9组成的字符串(以回车结束),找出最大值后按下列格式在屏幕上显示:<原字符串> The maximum is <最大值>.按任一键重做;按Esc键返回主菜单。
(3)按数字键“3”,完成输入数据组的排序。
用户输入一组十进制数值(小于255),然后变换成十六进制数,并按递增方式进行排序,按下列格式在屏幕上显示:<原数值串><新数值串>按任一键重做;按Esc键返回主菜单。
data segment ;定义数据段buff1 db 0 ;buff2 db 0 ;用来判断笑脸模式的输出方式buff3 db 0 ;line1 db 2,2,1,1,1,1,'$'line2 db 1,1,2,2,1,1,'$' ;line3 db 1,1,1,1,2,2,'$' ;笑脸内容3line4 db 3,3,6,6,6,6,'$' ;黑红桃1line5 db 6,6,3,3,6,6,'$' ;黑红桃2line6 db 6,6,6,6,3,3,'$' ;黑红桃3str1 db 'Today is:<' ;输出日期前的提示字符串str2 db 2 dup(0),'/' ;存放月份str3 db 2 dup(0),'/' ;存放日期str4 db 4 dup(0),'>$' ;存放年份str5 db 2 dup(0),':' ;存放小时str6 db 2 dup(0),':' ;存放分钟str7 db 2 dup(0),'$' ;存放秒钟str8 db 'Now the time is:$' ;输出时间前的提示字符串month db 0 ;当前月的缓存区域day db 0 ;当前日的缓存区域year dw 0 ;当前年的缓存区域hour db 0 ;当前小时的缓存区域hour2 db 0 ;刚开始计时时所提取的小时信息(固定)hour3 db 0 ;缓存当前小时与固定小时之间的差值,即缓存hour-hour2的值minute db 0 ;当前分钟的缓存区域minute2 db 0 ;刚开始计时时所提取的分钟信息(固定)minute3 db 0 ;缓存当前分钟与固定分钟之间的差值,即缓存minute-minute2的值second db 0 ;当前秒钟的缓存区域second2 db 0 ;刚开始计时时所提取的秒钟信息(固定)second3 db 0 ;缓存当前秒钟与固定秒钟之间的差值,即缓存second-second2的值time db '00:00:00$' ;计时信息的ASCII格式的字符串存放空间sen1 db 'Press S to Start $' ;需要输出的提示信息sen2 db 'Press R to Restart$' ;需要输出的提示信息sen3 db 'Press C to Close $' ;需要输出的提示信息sen4 db '07503$' ;需要输出的提示信息sen5 db '071508$' ;需要输出的提示信息sen6 db 'ShenXun$' ;需要输出的提示信息sen7 db 'Press E to Exit $' ;需要输出的提示信息sen9 db '********Enjoy Every Minute*****From Zero To Hero********$' ;需要输出的提示信息tank db ' |',0ah,0dh db ' __\--__|_',0ah,0dhdb ' [/ ',04,04,'02 ___|',0ah,0dhdb ' _____\______|/-----.',0ah,0dhdb ' /____________________| ',0ah,0dhdb ' / ',0ah,0dhdb ' ~~~~~~~~~~~~~~~~~ ',0ah,0dhdb ' -<-<-<@',0ah,0dhdb ' -<-<@--<-<-<@--<-<-<@',0ah,0dh,0ah,0dhdb ' Power of Tank VS Beauty of Flower!!!','$';待输出的坦克及一些其他信息frame1 db 14,26 dup(0),14,'$' ;frame2 db 14,26 dup(0),14,'$' ;frame3 db 14,26 dup(0),14,'$' ;待data endsstack segmentstap1 db 100h dup(0)stack endscode segment publicassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,ax ;将data的段基址赋给dsmov ax,stackmov ss,ax ;将code的段基址赋给ssjmp begin ;跳转到beginclear macro x,y,z,w,t,s ;清屏宏:向上滚屏mov al,t ;t为滚动行数mov ch,x ;x左上角行坐标mov cl,y ;y左上角列坐标mov dh,z ;z右下角行坐标mov dl,w ;w右下角列坐标mov bh,s ;s为颜色设置mov ah,6hint 10hendmgettime macro ;定义取时间的宏mov ah,2chint 21hendmgetdate macro ;定义取日期的宏mov ah,2ahint 21hendmdisp macro x ;显示字符串的宏mov dx,offset xmov ah,09hint 21hendmpoint macro x,y ;光标位置置于x行,y列的宏mov dh,xmov dl,ymov bh,0mov ah,02hint 10hendmnum2asc proc ;asc码转换cmp ax,10 ;jl next1mov di,10next: xor dx,dxdiv diadd dx,'0'dec bxmov [bx],dlor ax,axjnz nextjmp exitnext1: add al,30hdec bxmov [bx],almov al,'0'dec bxmov [bx],alexit: retnum2asc endptransf macro x,y ;定义一个把提取到的月,日,时分秒都转换成asc数字并且赋给各自数组的宏mov bx,offset x ;得到末尾地址,是指针指向最后一个数字区域的后面位置xor ax,ax ;将ax清零mov al,byte ptr y ;将y型数据(提取到的数据)放到al当中call num2asc ;应用num2asc过程来进行数据转换endmbegin: clear 0,0,24,79,0,09h ;全屏清屏,背黑,前蓝高亮clear 5,26,9,54,5,0ah ;部分屏幕清屏,背黑,前绿高亮point 6,26 ;调用光标宏,把光标位置设置在6,26(上一步清掉的屏幕内)disp frame1 ;调用显示功能显示frame1point 7,26 ; .disp frame2 ; .point 8,26 ; .disp frame3 ;到此显示完框架point 3,25 ;把光标位置设置在3,25disp str8 ;point 1,12 ;把光标位置设置在1,12disp sen9 ;point 2,30 ;把光标位置设置在2,30getdatemov byte ptr month,dh ;把月份存入month变量mov byte ptr day,dl ;把日期存入day变量mov word ptr year,cx ;把年份存入year变量mov bx,offset str2+2 ;bx指向str2最后xor ax,ax ;ax清零mov al,byte ptr month ;把month中的数据读入al中call num2asc ;调用num2sac子程序mov bx,offset str3+2 ;bx指向str3最后xor ax,ax ;ax清零mov al,byte ptr day ;把day中的数据读入al中call num2asc ;调用num2sac子程序mov bx,offset str4+4 ;bx指向str4最后mov ax,word ptr year ;把year中的数据读入al中call num2asc ;调用num2sac子程序disp str1 ;显示从str1开始的字符,即显示日期point 6,30 ;把光标位置设置在6,30disp sen1 ;显示提示字符point 7,30 ;把光标位置设置在7,30disp sen7 ;显示提示字符begin1: gettime ;取时间mov byte ptr hour,ch ;把小时存入hour变量mov byte ptr minute,cl ;把分钟存入minute变量mov byte ptr second,dh ;把秒钟存入second变量mov bx,offset str5+2 ;bx指向str5最后xor ax,ax ;ax清零mov al,byte ptr hour ;把hour中的数据读入al中call num2asc ;调用num2sac子程序mov bx,offset str6+2 ;bx指向str6最后xor ax,ax ;ax清零mov al,byte ptr minute ;把minute中的数据读入al中call num2asc ;调用num2sac子程序mov bx,offset str7+2 ;bx指向str7最后mov al,byte ptr second ;把second中的数据读入al中call num2asc ;调用num2sac子程序point 3,43 ;把光标位置设置在3,43disp str5 ;把str5的内容显示出来point 11,35 ;把光标位置设置在11,35mov si,offset buff3 ;把buff3的偏移量给sicmp byte ptr [si],01h ;判断当前buff3里面的值是否为1je color ;是就跳转colorcmp byte ptr [si],02h ;判断当前buff3里面的值是否为2je color1 ;是就跳转color1cmp byte ptr [si],03h ;判断当前buff3里面的值是否为3je color20 ;是就跳转color20cmp byte ptr [si],04h ;判断当前buff3里面的值是否为4je color30 ;是就跳转color30clear 11,0,24,79,14,0ch ;清屏,从11行起的下面全部屏幕,背黑前红disp sen4 ;显示班级point 12,0 ;把光标位置设置在12,0disp tank ;显示tank图案inc buff3 ;buff3自增1jmp continuecolor: clear 11,0,24,79,14,0dh ;清屏,从11行起的下面全部屏幕,背黑前绛disp sen5 ;显示学号point 12,0 ;把光标位置设置在12,0disp tank ;显示tank图案inc buff3 ;buff3自增1jmp continuecolor20:jmp color2 ;跳转长度有限,专门设置的中转跳转站color30:jmp color3 ;跳转长度有限,专门设置的中转跳转站color1: clear 11,0,24,79,14,0ah ;清屏,从11行起的下面全部屏幕,背黑前绿disp sen6 ;显示姓名point 12,0 ;把光标位置设置在12,0disp tank ;显示tank图案inc buff3 ;buff3自增1jmp continuecolor2: clear 11,0,24,79,14,0fh ;清屏,从11行起的下面全部屏幕,背黑前灰disp sen6 ;显示姓名point 12,0 ;把光标位置设置在12,0disp tank ;显示tank图案inc buff3 ;buff3自增1jmp continuecolor3: clear 11,0,24,79,14,0eh ;清屏,从11行起的下面全部屏幕,背黑前褐disp sen6 ;显示姓名point 12,0 ;把光标位置设置在12,0disp tank ;显示tank图案mov byte ptr buff3,0h ;buff3清零continue:mov si,offset buff1 ;把buff1的偏移量给sicmp byte ptr [si],01 ;判断[si],也就是Buff1里面的数据是否为1je timing2 ;为1的话继续计时mov ah,1 ;判断是否有键盘输入的程序int 16hjnz timing1 ;如果有的话跳转到timing1mov si,offset buff2cmp byte ptr [si],0 ;判断buff2的值是否为0je l3cmp byte ptr [si],1 ;判断buff2的值是否为1je l4point 4,37disp line6mov byte ptr [si],0h ;buff2中数据清零jmp g2l3: point 4,37disp line4inc byte ptr [si] ;buff2自增1jmp g2l4: point 4,37disp line5inc byte ptr [si] ;buff2自增1g2:jug1: gettime ;取时间mov al,byte ptr second ;cmp al,dh ;判断秒有没有变化je jug1 ;不变化一直循环,直至变化jmp begin1 ;返回begin1,继续取时间显示timing1:mov ah,8 ;读取键盘输入的ASCII值到al里面int 21hcmp al,'e' ;输入的是e,则退出程序je endicmp al,'E' ;E也退出程序je endicmp al,'s' ;输入的是s,则开始计时程序je zero0cmp al,'S' ;S开始计时je zero0jmp begin1 ;如果输入不满足要求程序继续循环timing2:point 6,30 ;计时程序开始,定光标位置disp sen2 ;显示提示字符point 8,30 ;disp sen3 ;显示提示字符mov si,offset buff2 ;从这一句到l2结束,即273行,意在输出变化的黑红桃cmp byte ptr [si],0 ;判断buff2的值是否为0je l1cmp byte ptr [si],1 ;判断buff2的值是否为1je l2point 4,37disp line3mov byte ptr [si],0hjmp g3l1: point 4,37disp line1inc byte ptr [si]jmp g3endi: jmp endingl2: point 4,37disp line2inc byte ptr [si] ;以上输出不在赘述,算法与前面输出变化的笑脸一样jmp g3zero0: jmp zero ;中转g3: mov ah,1 ;判断有没有字符从键盘输入int 16hjnz g ;有的话跳转到g进行判断jmp g1 ;没有的话掠过到g1g: mov ah,8 ;读取键盘输入的ASCII值到al里面int 21hcmp al,'e'je endincmp al,'E'cmp al,'r'je zero0cmp al,'R'je zero0cmp al,'c'je cancel1cmp al,'C'je cancel1g1: gettimemov byte ptr hour,ch ;把小时存入hour变量mov byte ptr minute,cl ;把分钟存入minute变量mov byte ptr second,dh ;把秒钟存入second变量mov ah,byte ptr second ;sub ah,byte ptr second2 ;求新提取的秒与之前“固定”的值做差值,并将差值赋给ah中jge c1 ;差值大于等于0则跳转到c1dec byte ptr minute ;提取的分钟减一,实际为被借了一位add ah,60 ;调整负数秒为正jmp c1endin: jmp ending ;中转cancel1:jmp cancel ;中转c1: mov byte ptr second3,ah ;将差值保存起来mov ah,byte ptr minutesub ah,byte ptr minute2 ;求分钟的差值jge c2dec byte ptr hour ;若为负,向hour借位add ah,60 ;负数修正c2: mov minute3,ahmov ah,byte ptr hoursub ah,byte ptr hour2jge c3add ah,24c3: mov hour3,ahtransf time+2,hour3 ;asc码转换,并放到指定位置transf time+5,minute3 ;asc码转换,并放到指定位置transf time+8,second3 ;asc码转换,并放到指定位置point 9,36 ;指定光标位置disp time ;输出显示计时mov byte ptr buff1,01hjug: gettime ;判断秒有无变化的延时,与jug1一样mov al,byte ptr secondje jugjmp begin1mov ah,01 ;等待键盘输入,使屏幕等待int 21hjmp endingcancel: mov si,offset buff1 ;下面的语句键入c后的清屏并显示需要的提示符mov byte ptr [si],00hclear 9,35,9,45,1,09hpoint 6,30disp sen1point 7,30disp sen7clear 8,28,8,50,1,0ahjmp beginzero: gettimemov byte ptr hour2,ch ;把采集好的小时数赋给hour2的字节储存空间mov byte ptr minute2,cl ;同理把分钟数据给minute2mov byte ptr second2,dh ;把秒数据给second2mov byte ptr buff1,01hjmp begin1ending: mov ah,4chint 21hcode endsend start。
东北大学接口技术报告步进电机控制系统学院XXXXXXXXXXXXXXXXX班级XXXXXXXXXXXXXXXXXXX姓名XXXXX学号XXXXXXXXXX日期XXXXXXXXXXXX【实验目的】1、利用PC机和实验箱,设计并实现给定步进电机的控制。
2、进一步掌握对芯片的硬件和软件综合设计方法。
3、了解微机的工作原理,微型计算机的基本结构,接口技术及汇编语言程序设计。
【实验内容】1、控制步进电机转动,要求转速1步/秒。
2、基于实验箱,设计并实现接口和驱动电路。
3、用汇编语言编制程序。
4、改善步进电机的控制性能,控制步进电机转/停;正转/反转;改变转速(至少3档);单步。
【实验设备】1)MUT-III型实验箱2)计算机【总体设计】1、8253定时控制步进速度。
2、8255输出控制脉冲,再经75452驱动电机。
3、系统运行时,通过按键的不同来控制电机转/停;正转/反转;改变转速(至少3档);单步。
【硬件设计】因采用了PC机和PC总线接口应用平台,硬件电路相对简单,除利用了PC机本身资源外(如中断资源),还利用了平台上的8253计数/定时器、8255并行接口单元,再加上外围驱动电路,便构成可步进电机控制电路,硬件原理图如图1:图中75452元件是正与非驱动器,OC门输出,所以加上拉电阻;8253的作用是输出定时信号向CPU申请中断要求输出电机走步的控制信号。
图1【芯片介绍】(1)8253定时器/计数器电路该电路由1片8253组成,8253的片选输入端插孔CS8253,数据口、地址、读、写线均已接好,T0、T1、T2时钟输入分别为8253CLK0、8253CLK1、8253CLK2。
定时器输出、GATE控制孔对应如下:OUT0、GATE0、OUT1、GATE1、OUT2、GATE2、CLK2。
原理图如下:注:GATE信号无输入时为高电平(2)82558255可编程并口电路:该电路由1片8255组成,8255的数据口,地址,读写线,复位控制线均已接好,片选输入端插孔为8255CS,A,B,C三端口的插孔分别为:PA0~PA7,PB0~PB7,PC0~PC7.电路原理如图:8255A是比较常用的一种并行接口芯片,其特点在许多教科书中均有介绍。
多功能电子时钟系统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. 教学内容与教材章节相对应,确保学生能够结合教材深入理解课程内容。
《微机原理与系统设计》作业2
1.三态逻辑电路输出信号的三个状态是、和。
2.在8086的基本读总线周期中,在状态开始输出有效的ALE信号;在状态开始
输出低电平的RD信号,相应的DEN为电平,DT/R为电平;引脚AD15~AD0上在状态期间给出地址信息,在状态完成数据的读入。
3.RESET信号在至少保持4个时钟周期的电平时才有效,该信号结束后,CPU内部
的CS为,IP为,程序从地址开始执行。
4.在构成8086最小系统总线时,地址锁存器74LS373的锁存信号LE应接CPU的信
号,输出允许端OE应接;数据收发器74LS245的方向控制端DIR应接信号,输出允许端G应接信号。
5.CPU在状态开始检查READY信号,电平时有效,说明存储器或I/O端口准备
就绪,下一个时钟周期可进行数据的读写;否则,CPU可自动插入一个或几个,以延长总线周期,从而保证快速的CPU与慢速的存储器或I/O端口之间协调地进行数据传送。
6.8086最大系统的系统总线结构较最小系统的系统总线结构多一个芯片。
7.如果8086/8088的CLK输入是4MHz,那么一个总线周期是。
8.在8086系统总线结构中,为什么要加锁存器?
9.利用常用芯片74LS373构成8086系统的地址总线,74LS245作为总线收发器构成数据总
线,画出8086最小方式系统总线形成电路。
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; }。
微机原理交通灯系统设计大作业微机原理与接口技术大作业交通灯控制电路设计1.设计题目交通灯控制电路设计建议:1-每个路口都有车行指示灯:红,黄,绿2-每个路口都有人行指示灯:红,绿3-倒计时显示:两位数码管4-使用pc-xt总线,定时器5-设计硬件电路,列写掌控规律,软件流程。
2.设计方案本方案通过采用pc-xt总线,定时器,20个共阴极led灯管,2片8255芯片与74ls138译码器,加上2个与门,以及16个led共阴极数码管实现题目给定的功能。
功能详述:并使东南西北四个路口的车行红绿黄灯,与人行道的红绿灯,同时实现如下功能:1-初始状态,四个路口全为红灯;2-东西路口车行指示灯红灯,东西路口人行指示灯绿灯,南北路口车行指示灯绿灯,南北路口人行指示灯红灯,延时3-东西路口车行指示灯黄灯闪光,东西路口人行指示灯红灯,南北路口车行指示灯绿灯,南北路口人行指示灯红灯,延时4-东西路口车行指示灯绿灯,东西路口人行指示灯红灯,南北路口车行指示灯红灯,南北路口人行指示灯绿灯,延时5-东西路口车行指示灯绿灯,东西路口人行指示灯红灯,南北路口车行指示灯黄灯闪烁,南北路口人行指示灯红灯,延时6-在各个交通灯按照上述逻辑循环转换期间,2十一位led数码管不间断计时进行倒计时,同时预备进行各个颜色交通灯的转换。
3.硬件电路如图所示由硬件电路分析:aen=0-非dma操作,可以使译码器参与译码输出有效的片选信号,故aen=0,取反后为1。
由于g为高电平有效率,g2a,g2b为高有效率,故a9=0;a8=0,aen=0并使g2a,g2b,g有效率。
由74ls138真值表可得输入CX600X-g1=1;g2a=g2b=0且挑选-c=b=a=1时,输入处为y0=y1=1,row后y1=y0=0,互连两个8255芯片的片挑选信号口cs。
由于cs口为低电平有效率,故两片8255与cpu及pc-xt总线顺利完成相连接故82551-交通灯处:掌控口地址:0011111111→0x0ffc口地址:0011111110→0x0feb口地址:0011111101→0x0fda口地址:0011111100→0x0fca,b,c输入,方式0,则8255方式掌控字为10000000=80h82552-倒计时数码管处:对共阴极led字形编码如下-0-3fh1-06h2-5bh3-4fh4-66h5-6dh6-7dh7-07h8-7fh9-6fh掌控口地址:0011111011→0x0fba口地址:0011111010→0x0f8b口地址:0011111001→0x0f9a,b输出,方式0,8255方式控制字为10000000=80h4.掌控规律1-对于交通灯的控制1.1-采用8255-1中的a,b端口的全部8十一位(包含pa0~7;pb0~7)引脚接线,接入led灯模拟交通灯,再利用c端口的低四位(pc0~3)接入led灯,至此完成四个路口20个(车行灯12+人行灯8)交通灯的接线与布置。
“微机原理与系统设计”课程大作业
各位同学:
虽然课程还没有进行到足以完成下面的作业,但教材给你们提供了很好的帮助,只要自己自学一下,相信你们能够很好地完成作业,也可以锻练你们的能力,祝你们在非常时期,得到长足的进步。
一、《微机原理与接口技术》编程入门
一般来说,用户设计的程序包含三个段:堆栈段(STACK)、数据段(DATA)和代码段(CODE)。
如果使用的堆栈单元较少,则也可以不定义堆栈段,这时会使用操作系统所定义的堆栈段。
如图1所示(分号“;”之后的内容表示注释)。
图1 汇编语言程序结构
有了这种结构,用户编写程序时,只需要将要定义的变量填入DATA段,将编写的汇编语言程序填入CODE段,使程序设计有了清楚的结构。
参见教材p103 例4.2 。
二、随机数产生 计算机不会产生绝对随机的随机数,计算机只能产生“伪随机数”。
伪随机数生成算法实际上是采用了"线性同余法”。
具体的计算如下:
()1*mod k k X A X C M -=+ 其中A,C,M 都是常数(一般会取质数)。
当C=0时,叫做乘同余法。
问题1:编写子程序RANDOM ,产生0~255之间的伪随机数;编写程序产生1000个随机数,并统计其概率分布图;运行3次,验证随机性。
提示:为了产生0~255之间的伪随机数,取M =256,A =19,C =37。
第一个数也需要具备随机性,我们可以利用INT 21H 的2CH 号功能(参见教材P384)获取本机系统时间,取DL 寄存器内容,作适当处理,使其在0~255之间。
随机数可以用于扑克牌的洗牌中。
每张扑克牌用一个字节表示,用低4位表示A ~K 用1~13表示,D5~D4表示花色:00~11分别表示方块、草花、红桃、黑桃;用D7~D6表示大小王,约定1000 0000B 表示大王,0100 0000B 表示小王。
洗牌之前将所有的牌按从小到大放在洗牌区(实际上是一块54字节的存储区域),然后经过p 次交换洗牌、q 次倒排洗牌、r 次块分割对插洗牌。
(1)交换洗牌:产生2个随机数(0~53,下同)n 、m ,将位置n 与m 的内容交换;(2)倒排洗牌:产生2个随机数n 、m ,设n<m ,将位置n 到m 的内容倒序排列;(3)块分割对插洗牌:产生2个随机数n 、m ,设n<m ,将位置n 到m 的内容移动到最后。
p 、q 、r 的取值可以通过试验确定。
问题2:设有4个人玩升级牌,设计子程序Shuffle 完成洗牌,设计程序完成发牌(底牌留6张),显示ABCD 各人手中牌和底牌,重复多次,验证洗牌的有效性。
进一步可以完成多副牌的洗牌和发牌。
题目有什么不妥之处,可以给我发Email :。