打印

写一个程序碰到了点问提,大家近来帮我分析分析

[复制链接]
3314|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lpz110|  楼主 | 2010-10-6 15:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ov, vi, via, RS, go
大家好,我写一个程序碰到了点问提,希望大家能够帮我分析分析,,单片机型号是:台湾远翔(与EMC的153,PIC508是兼容的),,程序的功能我大概的说下吧,做的产品就是个手电筒,轻触开关第一次按下,LED爆闪(延时是100MS),第二次按下:LED快闪(延时是250MS),就这两种状态。
下面是源代码
           TMR0    REG 01H
           PHCON   REG  0x0D
           PDCON   REG  0x0B
           PCON    REG  0x08
           PCL     REG  0x02
           PORTB   REG  0x06
           IOSTB   REG  0x06

           ORG 000H
           GOTO MAIN
           org 0ah
;---------------------------------------------------------------------------------------------------
  (PB.0为输入(低电平有效),.PB.1为输出(高电平有效),,其中PB.0带上拉)   
MAIN:   
                 MOVIA 00H
                 MOVAR PORTB           ;B口初始化
;               MOVIA 07H       ;set 256 freg
;               OPTION             ;设预分频
                 MOVIA ffh         ;关闭上下拉电阻
                 MOVAR PDCON
                 MOVIA feh     ;允许P1.0上啦
                 MOVAR PHCON
                 MOVIA 01H           ;设置B口为输出 P0.0为输入
                 IOST IOSTB
                 MOVIA 00H       ;设置电源控制寄存器
                 MOVAR PCON
            
                 movia 0                ;按鍵次數標誌
                 movar 20h
                 movia 03
                 movar 21h               ;按鍵的最高次數
                 movia 01                ;按鍵次數初始值
                 movar 23h
                 movia 02h               ;
                 movar 24h               
;--------------------------------------------------------------------------------------------------
                 call stata             ;調用按鍵程序
ddd:             Call lpz1
                 btrss portb,0            ;检测按键
hhhh:            call yjq         ;有键按下
                 goto ddd         ;无键按下
;------------------------------------------------------------------------------------------------
                                ;以下為按鍵掃描子程序
;------------------------------------------------------------------------------------------------
STATA:    btrsc portb,0        ;判断是否有键按下
          goto statA           ;没就等待
yjq:      CALL YS2                ;延时消斗
          btrsc portb,0     ;判断是否有键按下
          goto statA         
         
          incr 20h,1        ;有键按下 20H加1
          movr 20h,0       ;20H->A
          movar 22h         ;A->22H 将按键值暂存22H   (当前按键值与最高按键值比较)
         
          movr 21h,0            ;21H->A    將按鍵最高次數存A中
         
          subar 22h,1         22h-21h->22h;如果相减结果为0,则Z=1,反之相反
         
          btrsc 03h,2        判断03H单元“Z”的状态
     
          movia 1           ;当前按键与最高按键值相等,重赋值
          movar 20h           
lpz:      btrss portb,0       ;檢測按鍵是否釋放
          goto lpz            ;鍵未放
          RETFIE
;---------------------------------------------------------------------------------------------------
               ;;以下为按鍵識別子程序      (必要時可以開啟定時器掃描按鍵)
;---------------------------------------------------------------------------------------------------
lpz1:            movr 20h,0       ;將当前的按鍵值先預存在3EH里
                 movar 3eh
                 movr 23h,0        ;23H->A
                 subar 3eh,1        ;判斷是否是第一次按鍵
                 btrsc 03h,2
                 call gn1         ;调用第一次按键的功能程序
               

                 movr 20h,0       ;將当前的按鍵值先預存在3FH里
                 movar 3Fh        
           
                 movr 24h,0          ;24H->A
                 subar 3Fh,1        ;判斷是否是第二次按鍵
                 btrsc 03h,2
                 call gn2           ;调用第二次按键的功能程序
                 RETFIE

;---------------------------------------------------------------------------------
                         ;以下是按鍵功能子程序
;---------------------------------------------------------------------------------
            
gn1:      movia 02h                            ;按鍵1的功能程序
          movar portb
          call ys                             ;ys延時時間是100ms
          movia 00h
          movar portb
          call ys
          RETFIE

gn2:      movia 02h                            ;按鍵2的功能程序
          movar portb
          call ys1                             ;ys1延時時間是250ms
          movia 00h
          movar portb
          call ys1
          RETFIE
;-------------------------------------------------------------------------------------------------
                       ;下面是延時子程序
;-------------------------------------------------------------------------------------------------
ys:       movia 250            //   100MS延时
          movar 30h
mm1:      movia 100
          movar 31h
mm:       decrsz 31h,1       ;時間是100×2=200
          goto mm
          decrsz 30h,1       ;時間是250×2=500
          goto mm1
          RETFIE
YS1:     movia 250          //   250MS延时
          movar 2ah
zdhsq1:   movia 250
          movar 2bh
         
          btrss portb,0
          goto hhhh
                 

zdhsq:    decrsz 2bh,1      ;250*2=500
          goto zdhsq
          decrsz 2ah,1          ;25*2=500
          goto zdhsq1
          RETFIE

YS2:      movia 25            //10MS延时
          movar 2ch
wert:     movia 100
          movar 2dh
fsd:      decrsz 2dh,1  
          goto fsd
          decrsz 2ch,1
          goto wert
          RETFIE

相关帖子

沙发
hwq362202| | 2010-10-6 16:59 | 只看该作者
不明白???

使用特权

评论回复
板凳
yewuyi| | 2010-10-6 17:04 | 只看该作者
估计没人有耐心给你看代码捉虫子。

呵呵,你不能把大家当苦力用。

使用特权

评论回复
地板
lpz110|  楼主 | 2010-10-6 17:14 | 只看该作者
按下键灯不亮,就是不知道是什么原因啊

使用特权

评论回复
5
fzjswn| | 2010-10-6 17:21 | 只看该作者
出了问题尽量先把代码简化,然后一行行加上去!  
比如:可以按一下,亮了,按第二下灭了!   一步步找原因!

使用特权

评论回复
6
xiucai| | 2010-10-6 22:46 | 只看该作者
用C吧

使用特权

评论回复
7
zjswuyunbo| | 2010-10-6 23:28 | 只看该作者
听五楼的

使用特权

评论回复
8
le062| | 2010-10-7 14:19 | 只看该作者
用C吧
xiucai 发表于 2010-10-6 22:46

支持

使用特权

评论回复
9
ytmpeigd| | 2010-10-9 11:42 | 只看该作者
呵呵..
未用过EMC的芯片..

使用特权

评论回复
10
lbx_00| | 2010-10-9 16:24 | 只看该作者
LZ还是一点一点的调试吧,一下子鼓捣整个程序,不好办, 一个子程序一个子程序的各个击破

使用特权

评论回复
11
孤傲雕| | 2010-10-10 07:34 | 只看该作者
老师叫我们复杂一点得程序用C语言

使用特权

评论回复
12
110xia| | 2010-10-10 08:53 | 只看该作者
仿真试试,

使用特权

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

本版积分规则

0

主题

28

帖子

1

粉丝