1冒泡排序的ARM汇编程序ORG 09B0HQUE:MOV R3,#50H QUE1:MOV A,R3 MOV R0,AMOV R7,#0AHCLR 00HMOV A,@R0Q12:INC R0MOV R2,ACLR CMOV 22H,@R0CJNE A,22H,Q13 SETB CQ13:MOV A,R2JC Q11SETB 00HXCH A,@R0DEC R0XCH A,@R0INC R0Q11:MOV A,@R0 DJNZ R7,Q12JB 00H,QUE1SJMP $END2 ARM汇编希尔排序法对10个带符号数进行排序Code:void shell(int src[],int l,int r){int ih;r++;for(ih=1;ih<(r-l)/9;ih=ih*3+1);//eax,ih//ebx,il//ecx,ir//edx,cmps_asm{push eaxpush ebxpush ecxpush edxpush esipush edi;貌似这堆进栈用处不大哎mov edi,srcmov eax,dword ptr [ih]LIH:cmp eax,0jna EXIHmov ebx,eaxdec ebxLLH:cmp ebx,dword ptr [r]jnb EXLLHmov ecx,ebxmov edx,dword ptr [edi+ecx*4]LCMP:mov esi,eaxdec esicmp ecx,esijna EXCMPpush ecxsub ecx,eaxcmp edx,dword ptr [edi+ecx*4] pop ecxjnb EXCMPpush ebxpush ecxsub ecx,eaxmov ebx,dword ptr [edi+ecx*4] pop ecxmov dword ptr [edi+ecx*4],ebx pop ebxsub ecx,eaxjmp LCMPEXCMP:mov dword ptr [edi+ecx*4],edx inc ebxjmp LLHEXLLH:push ecxmov ecx,3push edxcdqidiv ecxpop edxpop ecxjmp LIHEXIH:pop edipop esipop edxpop ecxpop ebxpop eax}}351单片机C语言对流水灯编程,用定时中断做#include<reg52.h>define uchar unsigned charuchar m=0,i=0;void main(){ TMOD|=0x01; //定时器0工作方式为1TH0=(65536-50000)/256; //装初值TL0=(65536-50000)%256; EA=1; //开总中断ET0=1; //开定时器中断TR0=1; //开启定时器while(1); //等待中断}void timer0() interrupt 1{TH0=(65536-50000)/256;TL0=(65536-50000)%256; m++ ;if(m==5) //12M晶振定时5*50MS=250MS{m=0;P1=~(0X01<<i);//P1接8个LEDif(++i==8) i=0;}}4单片机编程C语言和汇编都可以。
外部中断int0口控制p2.3口得报警器。
中断信号是开关量,就是行程开关。
本程序晶振为:12MHZ,报警输出频率为:100HZORG 0000H LJMP MAIN ORG 0003H ;INT0中断入口LJMP XC_INT0ORG 000BH ;T0中断入口LJMP BJ_T0ORG 0030HMAIN:MOV TMOD,#01HMOV TH0,#0ECH ;定时初值,定时值为5msMOV TL0,#78HSETB EASETB EX0SETB ET0CLR IT0SJMP $;===int0外部中断子程序===XC_INT0:PUSH ACCPUSH PSWSETB TR0POP PSWPOP ACCRETI;===报警频率产生T0中断===BJ_T0:CPL p2.3MOV TH0,#0ECHMOV TL0,#78HRETI5单片机外部中断的编程设计单片机程序,基于T0用定时中断设计秒表,秒计数结果在数码管显示,用外部中断INT0(边沿触发方式)对秒计数结果进行清零,用P3.0对秒计数进行启动和停止控制。
T0定时中断50毫秒,进行20次中断得到1秒的定时,秒计数结果送P1口进行LED显示,将外部中断设置成边沿触发方式。
/***********************************************/#include<reg51.h>sbit shiwei=P2^0;//定义接口sbit gewei=P2^1;/*********************************************/unsigned char code table[]={//数码显示表0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};/*******************************************/void msdelay()//5 ms 延时{int x,y;for(x=(65536-15)%256;x;x--){for(y=(65536-15)/256;y;y--);}}/***************************************//**************************************/void init()//初始化{TMOD=0x11;PX0=1;TH0=(65535-50)/256;TL0=(65535-50)%256;TH1=(65535-100)/256;TL1=(65535-100)%256;EX0=1;ET0=1;ET1=1;EA=1;TR1=1;}/*****************************************/ unsigned char passtime=0;//全局变量unsigned char timecount=0;/*****************************************/main(){unsigned char count;count=0;init();while(P3^0!=1);msdelay();if(P3^0==1)//确定开始或者结束{count++;if(count%2){TR0=1;}else{TR0=0;}}}void clear() interrupt 0//清零{TR0=0;timecount=0;passtime=0;}void timer() interrupt 2//50ms 定时{timecount++;if(timecount==20){timecount=0;passtime++;//50*20=1s}TH0=(65535-50)/256;TL0=(65535-50)%256;TR0=1;}void displaytimer() interrupt 2//用于数码管的两位显示,十位和各位{TH1=(65535-100)/256;TL1=(65535-100)%256;shiwei=0;//动态显示,其中P2.0=0十位选通P2.1=各位选通gewei=1;P0=table[passtime/10];//十位msdelay();msdelay();msdelay();shiwei=1;gewei=0;P0=table[passtime%10];//各位msdelay();msdelay();msdelay();TR1=1;}6. 80c51单片机很简单的中断编程试编写一段对中断系统初始化的程序,使之允许INRO(上面有一横),INT1(上面有一横),T0,串行口中断,且使T0中断为高优先级。
ORG 0000HLJMP STARTORG 0003HLJMP _X0_INTORG 000BHLJMP _T0_INTORG 0013HLJMP _X1_INTORG 001BHLJMP _T1_INTORG 0023HLJMP _S_INTSTART:MOV IE, #10010111BMOV IP, #00000010B.........._X0_INT:..........RETI....................END7.利用外部输入中断设计一个应用系统,实时显示P3.3引脚上出现的负跳变脉冲的个数。
用51单片机ORG 0000HAJMP STARTORG 0013HAJMP INT1ORG 0100HSTART:SETB EA ;总中断允许SETB IT1 ;外部中断1允许MOV R0,#00HHERE:SJMP HEREINT1:INC R0RETIEND8.基于单片机的交通信号灯模拟控制系统设计设计内容及要求:1、硬件设计单片机主电路、交通灯接口电路、LED数码管显示电路,键盘控制电路。
2、软件设计系统流程图、各功能程序设计环境:Protel99SE 、W A VE仿真环境、H51/L仿真器、单片机多功能实验箱实现目标:(1)正常情况下交叉路口的轮流通行(主道3个LED红、黄、绿控制直行,支道3个LED红、黄、绿,切换时间自行设定);(2)特殊情况控制通行方式控制,用按键开关K1控制主道通行,支道禁行,K2控制支道通行,主道禁行,特殊情况控制通行放行。
(3)有紧急情况时用按键开关K0控制两道均为红灯;(4)4位LED数码管能够显示双直行方向绿灯和红灯的等待时间。
2位LED数码管显示程序:P0口接数码管段,P2口接数码管位。
P3口接键盘,P1口接发光二极管ORG 0000HLJMP MAINORG 0003HLJMP INT0PORG 000BHLJMP T0INTORG 0013HLJMP INT1PORG 001BHLJMP CTC1ORG 0100HMAIN: LCALL CSHIH ;初始化LOOP: LCALL TONGX ;通行路口LCALL H_BCD2 ;计算(1位HEX转换为2位BCD码)LCALL YIMA ;译码LCALL LED4W ;显示CLR 00HJNB 00H,$DJNZ R6,LOOPMOV R6,#100JNB 10H,LOOP1 ;启动特殊功能K0JB 10H,$LOOP1: JNB 11H,LOOP2 ;启动特殊功能K1 JB 11H,$NOPLOOP2: JNB 12H,LOOP3 ;启动特殊功能K2 JB 12H,$NOPLOOP3: DJNZ TIME,LOOPSETB 02HSJMP LOOPTONGX: JB 01H,DONGXJB 02H,HUANG1MOV P1,#21HSJMP TX_OUTHUANG1: MOV P1,#22HMOV TIME,#1DJNZ R5,TX_OUTMOV R5,200CLR 02HCPL 01HMOV TIME,#15SJMP TX_OUTDONGX: JB 02H,HUANG2MOV P1,#0CHSJMP TX_OUTHUANG2: MOV P1,#14HMOV TIME,#1DJNZ R5,TX_OUTMOV R5,200CLR 02HCPL 01HMOV TIME,#15TX_OUT: RETLED4W: MOV A,XWEIMOV B,#3MUL ABMOV DPTR,#LED4TJMP @A+DPTRLED4T: LJMP LD4W1LJMP LD4W2LJMP LD4W3LJMP LD4W4LD4W1: MOV LEDD,MLED1MOV LEDW,#1INC XWEISJMP LED4WELD4W2: MOV LEDD,MLED2MOV LEDW,#2INC XWEISJMP LED4WELD4W3: MOV LEDD,MLED3MOV LEDW,#4INC XWEISJMP LED4WELD4W4: MOV LEDD,MLED4MOV LEDW,#8MOV XWEI,#0LED4WE: RETYIMA: MOV R0,#BLED1 ;四位LEDMOV R1,#MLED1MOV R7,#2MOV DPTR,#YIMTABYIMA1: MOV A,@R0MOVC A,@A+DPTRMOV @R1,AINC R0INC R1DJNZ R7,YIMA1RETYIMTAB: DB 3FH,06H,5BH,4FH,66H ;0,1,2,3,4 DB 6DH,7DH,07H,7FH,6FH ;5,6,7,8,9 CSHIH: MOV TIME,#15MOV XWEI,#0MOV LEDD,#0MOV LEDW,#0MOV R6,#100 ;1秒延时MOV R5,#200 ;2秒延时MOV P1,#21HMOV 20H,#0MOV 22H,#0MOV TMOD,#61H ;T0方式1MOV TTH0,#0D8H ;10msMOV TTL0,#0F0HMOV TL0,TTL0MOV TH0,TTH0MOV TL1,#0FFHMOV TH1,#0FFHMOV IE,#8FHSETB TR0SETB TR1MOV BLED1,#0MOV BLED2,#0MOV MLED3,#0MOV MLED4,#0RETH_BCD2: MOV A,TIMEMOV B,#10DIV ABMOV BLED2,AMOV BLED1,BMOV MLED3,#0MOV MLED4,#0RETT0INT: MOV TL0,TTL0 MOV TH0,TTH0SETB 00HRETIINT0P: CPL 10HSETB P1.2CLR P1.1CLR P1.0SETB P1.5CLR P1.4CLR P1.3RETIINT1P: CPL 11HCLR P1.2CLR P1.1SETB P1.0SETB P1.5CLR P1.4CLR P1.3RETICTC1: CPL 12HMOV P1,#0CHRETIBIAOZDA TA 20H ;标志:.0定时到。