Chinaunix首页 | 论坛 | 博客

分类: 嵌入式

2012-05-19 12:14:09

本文转自:

今天要做的实验是在ST的三合一开发板上,用汇编语言写一个程序,驱动板上的LED指示灯闪烁。


开发板上的LED1接在STM8PD3上,因此要将PD3设置成输出模式,为了提高高电平时的输出电流,要将其设置成推挽输出方式。这主要通过设置对应的DDR/CR1/CR2寄存器实现。


还是利用ST的开发工具,先生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。


编译通过后,下载到开发板,运行程序,可以看到LED1在闪烁,且闪烁的频率为5HZ



stm8/



#include "mapping.inc"



; 下面定义端口D的寄存器地址


PD_ODR EQU $500f


PD_IDR EQU $5010


PD_DDR EQU $5011


PD_CR1 EQU $5012


PD_CR2 EQU $5013



; 定义堆栈空间的起始位置和结束位置


stack_start.w EQU $stack_segment_start


stack_end.w EQU $stack_segment_end



; 下面开始定义一个段,该段位于ROM


segment 'rom'


; 定义复位后的第一条指令的标号(即入口地址)


main.l


;


; 首先要初始化堆栈指针


LDW X,#stack_end


LDW SP,X



LD A,#08


LD PD_DDR,A ; PD3设置成输出


LD A,#08


LD PD_CR1,A ; PD3设置成推挽输出


LD A,#00


LD PD_CR2,A ;


MAIN_LOOP.L


LD A,#08 ;


LD PD_ODR,A ; PD3的输出设置成1


LD A,#100


CALL DELAY_MS ; 延时100MS



LD A,#00 ;


LD PD_ODR,A ; PD3的输出设置成1


LD A,#100


CALL DELAY_MS ; 延时100MS



JRA MAIN_LOOP ;



; 函数功能:延时


; 输入参数:寄存器A -- 要延时的毫秒数,这里假设CPU的主频为2MHZ


; 输出参数:无


; 值:无


; 注:无


DELAY_MS.L


PUSH A ; 将入口参数保存到堆栈中


LD A,#250 ; 寄存器A<-250,作为下面的循环数


DELAY_MS_1.L


NOP ; 用空操作指令进行延时4T


NOP


NOP


NOP


NOP


DEC A ; 寄存器A<-A-1,本条指令执行之间为1T


JRNE DELAY_MS_1 ; 若不等于0,则循环,


; 本条指令执行时间为2T(跳时)或1T(不跳时)


POP A ; 从堆栈中恢复入口参数


DEC A ; 将要延时的MS数-1


JRNE DELAY_MS ; 若不等于0,则循环


RET ; 函数返回



interrupt NonHandledInterrupt


NonHandledInterrupt.l


iret



; 下面定义中断向量表


segment 'vectit'


dc.l {$82000000+main} ; reset


dc.l {$82000000+NonHandledInterrupt} ; trap


dc.l {$82000000+NonHandledInterrupt} ; irq0


dc.l {$82000000+NonHandledInterrupt} ; irq1


dc.l {$82000000+NonHandledInterrupt} ; irq2


dc.l {$82000000+NonHandledInterrupt} ; irq3


dc.l {$82000000+NonHandledInterrupt} ; irq4


dc.l {$82000000+NonHandledInterrupt} ; irq5


dc.l {$82000000+NonHandledInterrupt} ; irq6


dc.l {$82000000+NonHandledInterrupt} ; irq7


dc.l {$82000000+NonHandledInterrupt} ; irq8


dc.l {$82000000+NonHandledInterrupt} ; irq9


dc.l {$82000000+NonHandledInterrupt} ; irq10


dc.l {$82000000+NonHandledInterrupt} ; irq11


dc.l {$82000000+NonHandledInterrupt} ; irq12


dc.l {$82000000+NonHandledInterrupt} ; irq13


dc.l {$82000000+NonHandledInterrupt} ; irq14


dc.l {$82000000+NonHandledInterrupt} ; irq15


dc.l {$82000000+NonHandledInterrupt} ; irq16


dc.l {$82000000+NonHandledInterrupt} ; irq17


dc.l {$82000000+NonHandledInterrupt} ; irq18


dc.l {$82000000+NonHandledInterrupt} ; irq19


dc.l {$82000000+NonHandledInterrupt} ; irq20


dc.l {$82000000+NonHandledInterrupt} ; irq21


dc.l {$82000000+NonHandledInterrupt} ; irq22


dc.l {$82000000+NonHandledInterrupt} ; irq23


dc.l {$82000000+NonHandledInterrupt} ; irq24


dc.l {$82000000+NonHandledInterrupt} ; irq25


dc.l {$82000000+NonHandledInterrupt} ; irq26


dc.l {$82000000+NonHandledInterrupt} ; irq27


dc.l {$82000000+NonHandledInterrupt} ; irq28


dc.l {$82000000+NonHandledInterrupt} ; irq29



end

阅读(1813) | 评论(0) | 转发(0) |
0

上一篇:stm8汇编-2

下一篇:missing prototype

给主人留下些什么吧!~~