开始学习松翰单片机了,第一个汇编程序,献丑了.
之前无论学习51,STM8还是MSP430,一直都很依赖C,虽然也算是用了几年MCU了,但从没用过汇编程序.现在头脑发抽,突然想学松翰,这芯片虽有C studio,但是为了摆脱C的粘性,决定学习汇编,就从这颗芯片开始.
写的第一个程序,单个LED闪烁,用C非常简单,但汇编还要查各种指令的使用方式,所以也捣鼓了一下午.
单片机仿真型号是2711.
献丑了.
/**********************************************************
;程序名称:LED闪烁程序
;日 期:2014.10.17
**********************************************************/
CHIP SN8P2711A
//{{SONIX_CODE_OPTION
.Code_Option LVD LVD_H ; 2.4V Reset Enable LVD36 bit of PFLAG for 3.6V Low Voltage Indicator
.Code_Option Reset_Pin P04
.Code_Option Watch_Dog Disable ; Disable Watchdog
.Code_Option High_Clk 4M_X'tal ; Crystal/Resonator: 2Mhz~10Mhz
.Code_Option Fcpu #0 ; Fcpu = Fosc/1
.Code_Option Security Enable
.Code_Option Noise_Filter Disable
//}}SONIX_CODE_OPTION
;RAM变量定义
.DATA
ORG 0H ;RAM变量定义起始地址
timera ds 1 ;1Byte变量
timerb ds 1 ;1Byte变量
;程序开始地址,ROM
.CODE
ORG 0H ;ROM起始地址
jmp main ;跳转到10H地址处,因00H - 10H处有中断处理入口,所以需要跳过
ORG 10H ;MAIN函数地址
main:
b0bset p5m.3 ;设置p5.3为输出模式
@@: ;暂时性标号
b0bset p5.3 ;置位P5.3
mov a,#255 ;载入延时时间
call delay ;延时
b0bclr p5.3 ;复位P5.3
mov a,#255 ;载入延时时间
call delay ;延时
jmp @b ;跳回向前最近的一个"@@"处
delay: ;延时子函数
mov timerb,a ;将延时变量(形参)载入函数变量
mov a,#100
mov timera,a ;将立即数载入变量timera
decms timera ;如果timera -- 等于0,则跳过下一条指令
jmp $-1 ;回到上一步,结合decms指令完成while(timera --)功能
decms timerb ;双重延时
jmp $-3 ;回到上面3步
ret ;子程序返回
ENDP ;程序结束
不错!!! delay: ;延时子函数
mov timerb,a ;将延时变量(形参)载入函数变量 //这一句把延迟参数送入 timerb
mov a,#100 //这一句就是把立即数送入A
mov timera,a ;将立即数载入变量timera //这一句相当于吧A的数直接放到 timerb,,,为啥不直接立即寻址吧100放入 timerble ??movtimerb,#100/////////第一句就变的没意义了,没用就直接被下面的覆盖了!
今天刚刚学习汇编,。。{:lol:} dz20062008 发表于 2014-10-17 19:10
delay: ;延时子函数
mov timerb,a ;将延时变量(形参)载入 ...
不会啊,两个变量,timera,timerb,
timerb = 传入变量
timera = #100 i7gly 发表于 2014-10-17 20:33
不会啊,两个变量,timera,timerb,
timerb = 传入变量
timera = #100
眼神不好,看花了。与c比有啥感想啊。为啥不学51的汇编啊,资料多? dz20062008 发表于 2014-10-17 20:51
眼神不好,看花了。与c比有啥感想啊。为啥不学51的汇编啊,资料多?
{:lol:} 用51我肯定又会依赖C,这单片机RAM紧张,不用汇编不好搞,强迫一下自己. 除非量大,用C开发效率高,修改容易。 膜拜了,还是很厉害 汇编学好了还是有用的,至少对寄存器的了解比用C的话深刻一些。 被汇编课程弄的脑大,膜拜,一起学习 没什么价值 其实,干吗要特意去学汇编?我刚开始也是用汇编写,但是后来用的芯片多了 就用C了。汇编和C的目的都一样,不过汇编相对比较直接而且 有时间,任性! 你很依赖延时函数 有量产需求,量大,想省成本才会考虑用汇编。 现在还学会汇编的,不多了{:biggrin:} 可以交流下 xyq1943rr 发表于 2018-4-12 18:22
现在还学会汇编的,不多了 可以交流下
现在松翰 很多支持C的MCU了 用C开发速度快得不止一点点。 汇编省空间小的项目还可以,大程序真心累。 C语言,可以写出汇编的效果,知道不? 多少年没有用汇编了,忘的差不多了。 汇编移植太麻烦了,特别像今年这种缺芯片的情况
页:
[1]