1冒泡排序的ARM汇编程序Word格式文档下载.docx
《1冒泡排序的ARM汇编程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《1冒泡排序的ARM汇编程序Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
END
2ARM汇编希尔排序法对10个带符号数进行排序
Code:
voidshell(intsrc[],intl,intr){
intih;
r++;
for(ih=1;
ih<
(r-l)/9;
ih=ih*3+1);
//eax,ih
//ebx,il
//ecx,ir
//edx,cmps
_asm{
pusheax
pushebx
pushecx
pushedx
pushesi
pushedi;
貌似这堆进栈用处不大哎
movedi,src
moveax,dwordptr[ih]
LIH:
cmpeax,0
jnaEXIH
movebx,eax
decebx
LLH:
cmpebx,dwordptr[r]
jnbEXLLH
movecx,ebx
movedx,dwordptr[edi+ecx*4]
LCMP:
movesi,eax
decesi
cmpecx,esi
jnaEXCMP
subecx,eax
cmpedx,dwordptr[edi+ecx*4]
popecx
jnbEXCMP
movebx,dwordptr[edi+ecx*4]
movdwordptr[edi+ecx*4],ebx
popebx
jmpLCMP
EXCMP:
movdwordptr[edi+ecx*4],edx
incebx
jmpLLH
EXLLH:
movecx,3
cdq
idivecx
popedx
jmpLIH
EXIH:
popedi
popesi
popeax
}
}
351单片机C语言对流水灯编程,用定时中断做
#include<
reg52.h>
defineucharunsignedchar
ucharm=0,i=0;
voidmain(){TMOD|=0x01;
//定时器0工作方式为1
TH0=(65536-50000)/256;
//装初值
TL0=(65536-50000)%256;
EA=1;
//开总中断ET0=1;
//开定时器中断TR0=1;
//开启定时器
while
(1);
//等待中断
voidtimer0()interrupt1
{
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口得报警器。
中断信号是开关量,就是行程开关。
本程序晶振为:
12MHZ,报警输出频率为:
100HZ
ORG0000HLJMPMAINORG0003H;
INT0中断入口
LJMPXC_INT0
ORG000BH;
T0中断入口
LJMPBJ_T0
ORG0030HMAIN:
MOVTMOD,#01H
MOVTH0,#0ECH;
定时初值,定时值为5ms
MOVTL0,#78H
SETBEA
SETBEX0
SETBET0
CLRIT0
SJMP$;
===int0外部中断子程序===
XC_INT0:
PUSHACC
PUSHPSW
SETBTR0
POPPSW
POPACC
RETI;
===报警频率产生T0中断===
BJ_T0:
CPLp2.3
MOVTH0,#0ECH
RETI
5单片机外部中断的编程
设计单片机程序,基于T0用定时中断设计秒表,秒计数结果在数码管显示,用外部中断INT0(边沿触发方式)对秒计数结果进行清零,用P3.0对秒计数进行启动和停止控制。
T0定时中断50毫秒,进行20次中断得到1秒的定时,秒计数结果送P1口进行LED显示,将外部中断设置成边沿触发方式。
/***********************************************/
reg51.h>
sbitshiwei=P2^0;
//定义接口
sbitgewei=P2^1;
/*********************************************/
unsignedcharcodetable[]={//数码显示表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f};
/*******************************************/
voidmsdelay()//5ms延时
intx,y;
for(x=(65536-15)%256;
x;
x--)
for(y=(65536-15)/256;
y;
y--);
}
/***************************************/
/**************************************/
voidinit()//初始化
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;
/*****************************************/
unsignedcharpasstime=0;
//全局变量
unsignedchartimecount=0;
main()
unsignedcharcount;
count=0;
init();
while(P3^0!
=1);
msdelay();
if(P3^0==1)//确定开始或者结束
{count++;
if(count%2)
{TR0=1;
else
{TR0=0;
voidclear()interrupt0//清零
TR0=0;
timecount=0;
passtime=0;
voidtimer()interrupt2//50ms定时
timecount++;
if(timecount==20)
passtime++;
//50*20=1s
TR0=1;
voiddisplaytimer()interrupt2//用于数码管的两位显示,十位和各位
shiwei=0;
//动态显示,其中P2.0=0十位选通P2.1=各位选通
gewei=1;
P0=table[passtime/10];
//十位
shiwei=1;
gewei=0;
P0=table[passtime%10];
//各位
6.80c51单片机很简单的中断编程
试编写一段对中断系统初始化的程序,使之允许INRO(上面有一横),INT1(上面有一横),T0,串行口中断,且使T0中断为高优先级。
ORG0000H
LJMPSTART
ORG0003H
LJMP_X0_INT
ORG000BH
LJMP_T0_INT
ORG0013H
LJMP_X1_INT
ORG001BH
LJMP_T1_INT
ORG0023H
LJMP_S_INT
START:
MOVIE,#10010111B
MOVIP,#00000010B
..........
_X0_INT:
RETI
END
7.利用外部输入中断设计一个应用系统,实时显示P3.3引脚上出现的负跳变脉冲的个数。
用51单片机
AJMPSTART
ORG0013H
AJMPINT1
ORG0100H
SETBEA;
总中断允许SETBIT1;
外部中断1允许
MOVR0,#00H
HERE:
SJMPHEREI
NT1:
INCR0
8.已知89C51单片机的晶振频率为6MHz,T1扩展为第三外部终端源,用T0定时。
试编程实现T1扩展为第三外部终端源功能(每次中断就取反P1.2引脚)且由P1.0和P1.1引脚分别输出周期为3ms和600us的方波。
(用中断编程,T1用模式2、T0用模式1;
写出定时计数初值计算过程,程序的首地址从0000H开始,注释每条语句)
外部中断信号接到P3.3口,为INT0中断,程序如下
sbitX0=P1^0;
//用X0表示
P1.0sbitX1=P1^1;
//用X0表示P1.1
sbitX2=P1^2;
//用X0表示P1.2
voidmain(void)
{
P1=0x00;
//将P1口初始化位高电平,如果没有这句,初始化为低电平,这里可根据需要选择
//中断允许
IT1=1;
//触发方式为下降沿触发
EX1=1;
//外