1冒泡排序的ARM汇编程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
TH0=0xfd; //T0用模式1,16位计时器,在1.5ms后执行时间中断0
TL0=0x12;
TH1=0x6a; //T1用模式2,8位计时器,在0.3ms执行时间中断1
TL1=0x6a;
TR1=1; //启动计时器T1
TR0=1; //启动计时器T0
while(X0==1); //等待中断响应完成
{
int x,y;
for(x=(65536-15)%256;x;x--)
{
for(y=(65536-15)/256;y;y--);
}
}
/***************************************/
/**************************************/
void init()//初始化
START: SETB EA;
总中断允许 SETB IT1 ;外部中断1允许
MOV R0,#00H
HERE:
SJMP HERE I
NT1:
INC R0
RETI
END
8.已知89C51单片机的晶振频率为6MHz,T1扩展为第三外部终端源,用T0定时。试编程实现T1扩展为第三外部终端源功能(每次中断就取反P1.2引脚)且由P1.0和P1.1引脚分别输出周期为3ms和600us的方波。(用中断编程,T1用模式2、T0用模式1;写出定时计数初值计算过程,程序的首地址从0000H开始,注释每条语句)
EX1=1; //允许外部中断
}
void counter2(void) interrupt 1 //定时器0中断
{
X0=0;
}
void counter3(void) interrupt 3 //定时器1中断
{
X1=0;
}
9. 基于单片机的交通信号灯模拟控制系统设计 设计内容及要求: 1、硬件设计 单片机主电路、交通灯接口电路、LED数码管显示电路,键盘控制电路。 2、软件设计 系统流程图、各功能程序 设计环境: Protel99SE、WAVE仿真环境、H51/L仿真器、单片机多功能实验箱 实现目标: (1)正常情况下交叉路口的轮流通行(主道3个LED红、黄、绿控制直行,支道3个LED红、黄、绿,切换时间自行设定); (2)特殊情况控制通行方式控制,用按键开关K1控制主道通行,支道禁行,K2控制支道通行,主道禁行,特殊情况控制通行放行。 (3)有紧急情况时用按键开关K0控制两道均为红灯; (4)4位LED数码管能够显示双直行方向绿灯和红灯的等待时间。
CPL p2.3
MOV TH0,#0ECH
MOV TL0,#78H
RETI
5单片机外部中断的编程
设计单片机程序,基于T0用定时中断设计秒表,秒计数结果在数码管显示,用外部中断INT0(边沿触发方式)对秒计数结果进行清零,用P3.0对秒计数进行启动和停止控制。T0定时中断50毫秒,进行20次中断得到1秒的定时,秒计数结果送P1口进行LED显示,将外部中断设置成边沿触发方式。
{
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;
}
/*****************************************/
{
timecount++;
if(timecount==20)
{
timecount=0;
passtime++;//50*20=1s
}
TH0=(65535-50)/256;
TL0=(65535-50)%256;
TR0=1;
}
void displaytimer() interrupt 2//用于数码管的两位显示,十位和各位
EA=1; //中断允许
IT1=1;//触发方式为下降沿触发
EX1=1; //外部中断允许
while(1); //这里可以随便写你需要的主程序,我用了个死循环,目的是等待中断
}
void counter1(void) interrupt 2 //INT1中断
{
EX1=0; //禁止外部中断
TL0=(65536-50000)%256; m++ ;
if(m==5) //12M晶振定时5*50MS=250MS
{
m=0;
P1=~(0X01<<i);
//P1接8个LED
if(++i==8) i=0;
}
}
4单片机编程C语言和汇编都可以。外部中断int0口控制p2.3口得报警器。中断信号是开关量,就是行程开关。
r++;
for(ih=1;ih<(r-l)/9;ih=ih*3+1);
//eax,ih
//Fra Baidu bibliotekbx,il
//ecx,ir
//edx,cmps
_asm{
push eax
push ebx
push ecx
push edx
push esi
push edi;貌似这堆进栈用处不大哎
mov edi,src
mov eax,dword ptr [ih]
ORG 0000H
LJMP START
ORG 0003H
LJMP _X0_INT
ORG 000BH
LJMP _T0_INT
ORG 0013H
LJMP _X1_INT
ORG 001BH
LJMP _T1_INT
ORG 0023H
LJMP _S_INT
START:
MOV IE, #10010111B
MOV IP, #00000010B
1冒泡排序的ARM汇编程序
ORG 09B0H
QUE:MOV R3,#50H
QUE1:MOV A,R3
MOV R0,A
MOV R7,#0AH
CLR 00H
MOV A,@R0
Q12:INC R0
MOV R2,A
CLR C
MOV 22H,@R0
CJNE A,22H,Q13
SETB C
Q13:MOV A,R2
{
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;
外部中断信号接到P3.3口,为INT0中断,程序如下
#include<reg51.h> sbit X0=P1^0; //用X0表示
P1.0 sbit X1=P1^1; //用X0表示P1.1
sbit X2=P1^2; //用X0表示P1.2
void main(void)
{
P1=0x00; //将P1口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择
push ecx
sub ecx,eax
cmp edx,dword ptr [edi+ecx*4]
pop ecx
jnb EXCMP
push ebx
push ecx
sub ecx,eax
mov ebx,dword ptr [edi+ecx*4]
pop ecx
mov dword ptr [edi+ecx*4],ebx
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定时
LIH:
cmp eax,0
jna EXIH
mov ebx,eax
dec ebx
LLH:
cmp ebx,dword ptr [r]
jnb EXLLH
mov ecx,ebx
mov edx,dword ptr [edi+ecx*4]
LCMP:
mov esi,eax
dec esi
cmp ecx,esi
jna EXCMP
MOV TL0,#78H
SETB EA
SETB EX0
SETB ET0
CLR IT0
SJMP $ ;
===int0外部中断子程序===
XC_INT0:PUSH ACC
PUSH PSW
SETB TR0
POP PSW
POP ACC
RETI ;
===报警频率产生T0中断===
BJ_T0:
pop esi
pop edx
pop ecx
pop ebx
pop eax
}
}
351单片机C语言对流水灯编程,用定时中断做
#include<reg52.h>
define uchar unsigned char
uchar m=0,i=0;
void main() { TMOD|=0x01; //定时器0工作方式为1
本程序晶振为:12MHZ,报警输出频率为:100HZ
ORG 0000H LJMP MAIN ORG 0003H ;INT0中断入口
LJMP XC_INT0
ORG 000BH ;T0中断入口
LJMP BJ_T0
ORG 0030H MAIN:
MOV TMOD,#01H
MOV TH0,#0ECH ;定时初值,定时值为5ms
TH0=(65536-50000)/256; //装初值
TL0=(65536-50000)%256; EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; //开启定时器
while(1); //等待中断
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
..........
_X0_INT:
..........
RETI
..........
..........
END
7.利用外部输入中断设计一个应用系统,实时显示P3.3引脚上出现的负跳变脉冲的个数。 用51单片机
ORG 0000H
AJMP START
ORG 0013H
AJMP INT1
ORG 0100H
unsigned char passtime=0;//全局变量
unsigned char timecount=0;
/*****************************************/
main()
{
unsigned char count;
count=0;
init();
while(P3^0!=1);
pop ebx
sub ecx,eax
jmp LCMP
EXCMP:
mov dword ptr [edi+ecx*4],edx
inc ebx
jmp LLH
EXLLH:
push ecx
mov ecx,3
push edx
cdq
idiv ecx
pop edx
pop ecx
jmp LIH
EXIH:
pop edi
/***********************************************/
#include<reg51.h>
sbitshiwei=P2^0;//定义接口
sbit gewei=P2^1;
/*********************************************/
gewei=0;
P0=table[passtime%10];//各位
msdelay();
msdelay();
msdelay();
TR1=1;
}
6.80c51单片机很简单的中断编程
试编写一段对中断系统初始化的程序,使之允许INRO(上面有一横),INT1(上面有一横),T0,串行口中断,且使T0中断为高优先级。
unsigned char code table[]={//数码显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/*******************************************/
void msdelay()//5 ms延时
JC Q11
SETB 00H
XCHA,@R0
DEC R0
XCH A,@R0
INC R0
Q11:MOV A,@R0
DJNZ R7,Q12
JB 00H,QUE1
SJMP $
END
2ARM汇编希尔排序法对10个带符号数进行排序
Code:
void shell(int src[],int l,int r){
int ih;
ET0=1; //计时器中断0允许 ET1=1; //计时器中断1允许
TMOD=0x21; //T1用模式2、T0用模式1
IP=0x0a; //T1、T0为高优先级
X2=~X2; //每次中断就取反P1.2引脚
X1=1; //P1.1输出低电平0.3ms
X0=1; //P1.0输出低电平1.5ms
相关文档
最新文档