打印

不知道,这是否就是开源的传说!

[复制链接]
3615|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyuaug|  楼主 | 2009-9-16 08:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 warm_ice 于 2009-9-16 09:42 编辑

;*****************************************************
;Company :
;File Name : sevev.asm
;Author :
;Create Data : 2009-08-14
;Last Modified : 2009-08-14
;Description :
;Version : 1.0
;*****************************************************
;*****************************
list p=6612
;*****************************
ie equ 00h
irq equ 01h
tmod equ 02h
tmod1 equ 03h
tl0 equ 04h
th0 equ 05h
tl1 equ 06h
th1 equ 07h

inx equ 0fh
dpl equ 10h
dpm equ 11h
dph equ 12h
setting equ 13h
hlm_ace equ 14h

pa equ 08h
pb equ 09h
pc equ 0ah
duty equ 15h
tbr equ 0eh
sec_1 equ 20h
sec_2 equ 21h
min_1 equ 22h
min_2 equ 24h
temp equ 25h
flag equ 26h
m_flag equ 27h
s_flag equ 28h
ct0 equ 29h
ct1 equ 2ah
ct2 equ 2bh
ct3 equ 2ch

pb_bak equ 30h
  
org 00
jmp r_start
org 01h
rtni
org 02h
jmp time0
org 03h
jmp time1
org 04h
jmp pbc
;***********************************
org 0100h
time0:
lda flag
ba1 sec
orim flag,010b
jmp intend
sec:
andim m_flag,01
ba0 WW
orim pa,0110b ;eorim pa,0110b
call delay
andim pa,0 ;
;+++++++++++++++++++++++++++++++++
WW:
andim flag,000b
adim sec_1,01h
daa sec_1
ldi temp,0h
adcm sec_2,00h
;***********************
sbi sec_2,03
bnz wait ;30sec ?
andim m_flag,01
bnz setflag
;***********************
wait:
sbi sec_2,06
baz min
jmp intend
min:
ldi sec_2,0
adim min_1,01h
daa min_1
ldi temp,0h
;++++++++++1min++time+++++;EV_test mode
; sbi min_1,01
; bnz intend
;++++++++++30/60min++time++;work mode
adcm min_2,00h
sbi min_2,06h
bnz intend
;++++++++++++++++++++++++++++++
orim m_flag,01
jmp intend
setflag:
orim s_flag,01
intend:
ldi ie,0100b
ldi irq,0
rtni
;***************************
time1:
rtni  
;***************************
pbc:
ldi irq,0
rtni
;****************************   
r_start:
nop
nop
nop
        ldi tbr,0
ldi sec_1,0
ldi sec_2,0
ldi min_1,0
ldi min_2,0
ldi ct0,0
ldi ct1,0
ldi ct2,0

ldi flag,0
ldi s_flag,0
ldi m_flag,0

ldi pa,0
ldi pb,1111b
ldi pb_bak,0

ldi duty,00h
ldi setting,00h
ldi hlm_ace,0
  
ldi tmod,011b
ldi tl0,00h
ldi th0,08h

; jmp key_scan
;+++++++++++++++++++++++++++++            
mode_stop:
ldi m_flag,0
ldi s_flag,0
ldi min_2,0
ldi pa,0h;
ldi tmod,011b
ldi tl0,00h
ldi th0,08h
ldi irq,0
ldi ie,0001b
stop
nop
nop
;***************************
key_scan:
lda pb
sta pb_bak
sbi pb_bak,1111b
baz key_scan   
call delay_k
lda pb
sub pb_bak
bnz key_scan
eor pb_bak
ba1 $+2 ;key_1
jmp key_1
ba2 $+2 ;key_2
jmp key_2
jmp key_scan
key_1:
ldi ie,0100b
ldi irq,0
ldi min_2,03h
jmp main  
key_2:
ldi ie,0100b
ldi irq,0
ldi min_2,06h
;***************************************
main:

andim m_flag,01;after '30
ba0 mode_two
jmp main
mode_two:
ldi pa,1111b  
nop
nop
orim pa,1101b
andim s_flag,01 ;after 30s
ba0 mode_stop   
        jmp mode_two ;  
;+++++++++++++++++++++++++++++
delay:
adim ct0,01h
bnc delay
adim 30h,05h
bnc delay
ldi 30h,0
rtni
delay_k:
ldi ct1,09
ldi ct2,0eh
sbi ct2,01h
bnc $-1
sbi ct1,01h
bnc $-4
rtni
;+++++++++++++++++++++++++++++
END
沙发
warm_ice| | 2009-9-16 09:07 | 只看该作者
不明白楼主想表达什么意思.可否详细说明?

使用特权

评论回复
板凳
gaoyuaug|  楼主 | 2009-9-16 09:22 | 只看该作者
写着玩,因为板子IO限制了,
orim pa,1101b
改成
andim pa,1110b
SH66P12只能是低电平PBC中断吗?

使用特权

评论回复
地板
warm_ice| | 2009-9-16 09:26 | 只看该作者
写着玩,因为板子IO限制了,
orim pa,1101b
改成
andim pa,1110b
SH66P12只能是低电平PBC中断吗?
gaoyuaug 发表于 2009-9-16 09:22


SH66P12只能是低电平PB中断.

使用特权

评论回复
5
gaoyuaug|  楼主 | 2009-9-16 09:35 | 只看该作者
延时部份有两种:
前一种我是借鉴了手册,在中断里调用不会溢出。
而后一种在中断里调用会溢出,这是为什么呢?

使用特权

评论回复
6
warm_ice| | 2009-9-16 09:49 | 只看该作者
延时部份有两种:
前一种我是借鉴了手册,在中断里调用不会溢出。
而后一种在中断里调用会溢出,这是为什么呢?
gaoyuaug 发表于 2009-9-16 09:35

初步看了一下,先说一下看到的问题:
1.中断服务程序,进入时先要保存累加器A,一般是用STA指令,将累加器A的值保存到一个寄存器中,中断服务程序结束后,在RTNI返回前,恢复累加器A的值,一般用LDA指令;中断退出的最后3条一定为:
     恢复  IE
     恢复  A
     RTNI

2.一般中断中不会再调用延时程序;一是怕中断过长,影响正常程序运行,二是怕产生嵌套,超过4次嵌套就会产生溢出错误.

使用特权

评论回复
7
gaoyuaug|  楼主 | 2009-9-16 10:12 | 只看该作者
因为我不知道A里面是什么内容,要不要保存?

使用特权

评论回复
8
warm_ice| | 2009-9-16 10:34 | 只看该作者
因为我不知道A里面是什么内容,要不要保存?
gaoyuaug 发表于 2009-9-16 10:12

当然是不知道的,它是任何值都有机会,一定要保存.

使用特权

评论回复
9
gaoyuaug|  楼主 | 2009-9-16 10:57 | 只看该作者
我的中断是500ms一次,
而里面的延时不到20ms,怎么不能调用呢?

使用特权

评论回复
10
warm_ice| | 2009-9-16 11:12 | 只看该作者
我的中断是500ms一次,
而里面的延时不到20ms,怎么不能调用呢?
gaoyuaug 发表于 2009-9-16 10:57

我没说过不可以调用,只是说通常不这样做而已.

使用特权

评论回复
11
gaoyuaug|  楼主 | 2009-9-16 11:21 | 只看该作者
打扰一下
因为我采用第二种延时,中断里调用会溢出,
所以我采用了第一种延时的方法。
两种延时,都在一个子程序里,
我没搞懂,请帮我解一下这两种方法有什么区别?

使用特权

评论回复
12
warm_ice| | 2009-9-16 11:28 | 只看该作者
打扰一下
因为我采用第二种延时,中断里调用会溢出,
所以我采用了第一种延时的方法。
两种延时,都在一个子程序里,
我没搞懂,请帮我解一下这两种方法有什么区别? ...
gaoyuaug 发表于 2009-9-16 11:21

不好意思,能给我标示一下么,哪部分是第一种,哪部分是第二种,看着有点乱.

使用特权

评论回复
13
gaoyuaug|  楼主 | 2009-9-16 11:33 | 只看该作者
delay:

adim ct0,01h

bnc delay

adim 30h,05h

bnc delay

ldi 30h,0

rtni

delay_k:

ldi ct1,09

ldi ct2,0eh

sbi ct2,01h

bnc $-1

sbi ct1,01h

bnc $-4

rtni

;+++++++++++++++++++++++++++++

就是上面这两段

有条指令改下:pb—bak equ 02fh

使用特权

评论回复
14
warm_ice| | 2009-9-16 11:39 | 只看该作者
delay:

adim ct0,01h

bnc delay

adim 30h,05h

bnc delay

ldi 30h,0

rtni

delay_k:

ldi ct1,09

ldi ct2,0eh

sbi ct2,01h

bnc $-1

sbi ct1,01h

bnc $-4

rtni

;+++++++++++++++++++++++++++++

就是上 ...
gaoyuaug 发表于 2009-9-16 11:33


单看这2个延时程序本身都是没有问题的,只是第二种方法的延时时间明显要大于第一种方法.

使用特权

评论回复
15
mbutterfly| | 2009-9-16 12:05 | 只看该作者
晕,本来是开源的事情,后来又扯到了中断上;P

使用特权

评论回复
16
gaoyuaug|  楼主 | 2009-9-16 13:17 | 只看该作者
我是想在1s的周期内有个20ms左右的高电平。
因为这个程序我在编译的时候,发现在中断里调用软件延时,会溢出。
而换一种方法延时,再调用就不会溢出,所以我还是不懂。

使用特权

评论回复
17
warm_ice| | 2009-9-16 13:30 | 只看该作者
我是想在1s的周期内有个20ms左右的高电平。
因为这个程序我在编译的时候,发现在中断里调用软件延时,会溢出。
而换一种方法延时,再调用就不会溢出,所以我还是不懂。 ...
gaoyuaug 发表于 2009-9-16 13:17

仿真器ICE66有个TRACE的功能,程序运行至溢出时,程序会停下来,这时按CTRL+T键可以调出从停下来的这条程序之前运行的8K程序,您可以依据这个来查看错误出在哪里.

使用特权

评论回复
18
gaoyuaug|  楼主 | 2009-9-16 13:47 | 只看该作者
我是想说这个程序里的两种软件延时,
在算法上有什么区别?
这么说来,软件的思路是正确的。

使用特权

评论回复
19
warm_ice| | 2009-9-16 13:51 | 只看该作者
我是想说这个程序里的两种软件延时,
在算法上有什么区别?
这么说来,软件的思路是正确的。
gaoyuaug 发表于 2009-9-16 13:47

一个是加一个是减,都可以实现,当然也可以写足够多的NOP指令.这些都是形式,目的就是延时.
我说让你用一下TRACE功能,就是看一下你说有溢出错误的程序的问题出在哪.

使用特权

评论回复
20
gaoyuaug|  楼主 | 2009-9-16 13:59 | 只看该作者
就是这段:
;***********************************

org 0100h

time0:

lda flag

ba1 sec

orim flag,010b

jmp intend

sec:

andim m_flag,01

ba0 WW

orim pa,0110b ;eorim pa,0110b

call delay

andim pa,0 ;

;+++++++++++++++++++++++++++++++++

之前,我编译的时候会溢出;
所以,我换了种方法,就不溢出了
唉,不管了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

187

帖子

0

粉丝