SAM8系列S3C825A型单片机及其软件设计

[09-12 17:48:05]   来源:http://www.88dzw.com  单片机学习   阅读:8966

文章摘要:LD R9,R15;C函数传递参数给R15,暂时存储在R9CALL rand ;调用C库函数得到一个随机数,作为add的第一实参,存储在R15LD R14,R9;C函数传递的参数,作为add的第二实参,存储在R14CALL add ;add返回的值存储在R15中POP R9 ;add出栈恢复寄存器内定RETEND/ 汇编语言源程序结束 /4.2 汇编语言写中断服务程序为了提高系统响应速度,设计时往往要求中断服务程序的执行时间较短,执行速度较快。因此,最好的方法就是用汇编语言编写中断服务程序。但要注意以下2点:(1)中断函数不传递参数和返回结果;(2)中断过程中用到的寄存器都要进行保护。本例中用

SAM8系列S3C825A型单片机及其软件设计,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com
LD R9,R15;C函数传递参数给R15,暂时存储在R9

CALL rand ;调用C库函数得到一个随机数,作为add的第一实参,存储在R15

LD R14,R9;C函数传递的参数,作为add的第二实参,存储在R14

CALL add ;add返回的值存储在R15中

POP R9 ;add出栈恢复寄存器内定

RET

END

/**** 汇编语言源程序结束 ****/

4.2 汇编语言写中断服务程序

为了提高系统响应速度,设计时往往要求中断服务程序的执行时间较短,执行速度较快。因此,最好的方法就是用汇编语言编写中断服务程序。但要注意以下2点:

(1)中断函数不传递参数和返回结果;

(2)中断过程中用到的寄存器都要进行保护。

本例中用汇编语言编写看门狗定时器的中断服务程序,而用C语言编写主程序。

/****C语言主程序****/

#include<ios3c825a.h> /*头文件*/

extern void in0(void); /*中断函数声明*/

void main(void)

{

CLKCON=0X98; /*开中断*/

IMR=0X10; /*IRQ4使能*/

WTCON=0X84;/*看门狗定时器设为0.25秒*/

P2CONL=0X03; /*P2.0为输出*/

IPH=0X00;

IPL=0XD6; /*中断函数所对矢量位置*/

CLKCON=0X18; /*关中断*/

while(1);

}

/****C语言主程序结束****/

/****汇编语言编写的中断程序****/

#include <ios3c825a.h> ;头文件

public 'int0' ;中断函数声音

RSEG WATCHT:CODE:RROT (1),0X00D6 ;中断矢量在代码段中的绝对位置

Int0:

PUSH R1 ;寄存器保护

LD R1,#01H ;给PORT2寄存器赋值,使连接P2.1的LED定时发头

POP R1;寄存器恢复

IRET;中断返回

END

/****汇编语言编写的中断程序逻辑****/

5 结束语

以上方法已经应用于笔者参与设计的校音器设计中并取得良好的效果。但也要注意调试过程中编译器选项的设置对程序运行结果有一定的影响,因此,对SAM8系统中不同的核,一定要选用不同的内核版本号,否则,寄存器传递的参数可能会错位,从而导致参数传递错误,给调试带来不便。




上一页  [1] [2] [3] [4] 


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习

《SAM8系列S3C825A型单片机及其软件设计》相关文章

分类导航
最新更新
热门排行