导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[方家伟]小测试!



No.44798
作者:方家伟
邮件:huohua9902@21cn.com
ID:16113
登陆:1次
文章数:3篇
最后登陆IP:202.103.243.98
最后登陆:2003/11/15 11:09:33
注册:2003/11/14 18:38:15
财富:109
发帖时间:2003/11/14 18:41:16
发贴者IP:202.103.243.98
标题:方家伟:小测试!
摘要:No.44798小测试! 此程序在wave下能通过编译,看谁能在此程序找出最多逻辑错误!

;       8052 8通道扫描转换,温度采集控制程序
;
;
;20h 扫描通道
;21h 正在操作的扫描通道
;22h.0 显示通道1
;22h.1 显示通道2
;22h.2 显示通道3
;22h.3 显示通道4
;22h.4 收到发送标志
;22h.5 收到第一帧

;23h.0 全速扫描
;23h.1 0.5s
;23h.2 1s
;23h.3 5s
;23h.4 允许显示
;23h.5 发送允许
;23h.6 温度采集控制标志

;30h 显示通道1的数据
;31h 显示通道2的数据
;32h 显示通道3的数据
;33h 显示通道4的数据
;34h 显示计数
;35h 延时计数,即delay1ms调用次数
;36h 当前采集的数据
;37h 用于加在adc0809上的采集通道地址

;r3 显示时间控制
;r5 r4 计数标志
;r6做为模拟转换的地址位

;10100101 ----发送标志 a5h
;01111000-----电压采集控制标志 78h
;00011110-----温度控制标志 1eh
;11110000 00001111-----发送出错 f00fh

;关闭除串行口以外的中断
org 0000h
ljmp main
org 0003h
reti
org 000bh
reti
org 0013h
reti
org 001bh
reti
org 0023h
ljmp comr;串行中断跳转
;
;
;       初始化ram,串行模式,计数器t1模式
;
;
    org 100h
main:
    clr a
        mov p2,a      ;p1为0
        mov 21h,a
        mov 22h,a
        mov 23h,a
        mov 30h,a
        mov 31h,a
        mov 32h,a
        mov 33h,a
        mov 34h,a
        mov 35h,a
        mov 36h,a
        mov 37h,a     ;设置当前采集通道地址为00h
        mov a,#0ffh
        mov p0,a      ;p0,p1,p2为ffh
        mov p1,a
        mov p2,a
        mov 20h,a     ;20h,采集通道标志全为一
        setb 21h.0    ;设置当前采集通道为第一通道
        setb 23h.2    ;每一通道的采集时间间隔为1
        setb 23h.4    ;允许显示
        mov pcon,#00h ;smod为0
        mov tmod,#20h ;t1计数模式为8位再装入
        mov scon,#50h ;通讯方式1,允许中断
        mov th1,#0fdh ;设通讯波特率为9600bit/s
        mov tl1,#0fdh
        setb tr1      ;启动计时器t1
        setb ea       ;启用中断
        setb es       ;启用串行口中断
;
;
;       主程序
;
;
start:  
    jb 23h.6,start
        lcall test    ;采集当前通道
        lcall nextq   ;转向下一通道
        lcall send    ;发送数据
        lcall senddelay     ;延时
        lcall display ;显示
        ajmp start
;
;
;       采集子程序
;
;
test:   
    mov a,37h     ;取采集地址
        mov p2,a      ;送到p2,将地址加载到adc0809
        setb p2.3     ;地址锁存
        nop
        nop
        clr p2.3      ;
        setb p2.4     ;转换开始
        nop
        nop
        clr p2.4      ;
        nop
        nop
        nop
        nop
wait:   jb p3.7,movd  ;等待结束
        ajmp wait     ;

movd:   setb p2.5     ;输出允许
        mov a,p0      ;取数据
        mov 36h,a     ;送到36h
        clr p2.5      ;关闭输出
        clr a         ;
        mov p2,a      ;结束转换,复原 p0 p1 p2 p3
        mov a,#0ffh
        mov p1,a
        mov p0,a
        mov p3,a
        ret
;
;
;       取下一位采集地址
;
;
nextq:  
    jb 21h.0,nq1    ;取当前采集通道
        jb 21h.1,nq2
        jb 21h.2,nq3
        jb 21h.3,nq4
        jb 21h.4,nq5
        jb 21h.5,nq6
        jb 21h.6,nq7
        jb 21h.7,nq0
        ljmp main     ;没有当前采集通道,出错返回

nq1:    
    inc 37h       ;先加1
        jnb 20h.1,nq2 ;如果1通道不用采集,跳转到2通道,检测状态
        mov 21h,#00h    ;清除0通道标志
        setb 20h.1    ;设置1通道标志
        ret

nq2:    
    inc 37h
        jnb 20h.2,nq3
        mov 21h,#00h
        setb 21h.2
        ret

nq3:
    inc 37h
        jnb 20h.3,nq4
        mov 21h,#00h
        setb 21h.3
        ret

nq4:        
    inc 37h
        jnb 20h.4,nq5
        mov 21h,#00h
        setb 21h.4
        ret

nq5:    
    inc 37h
        jnb 20h.5,nq6
        mov 21h,#00h
        setb 21h.5
        ret

nq6:    
    inc 37h
        jnb 20h.6,nq6
        mov 21h,#00h
        setb 21h.6
        ret

nq7:    
    inc 37h
        jnb 20h.7,nq0
        mov 21h,#00h
        setb 21h.0
        ret

nq0:    mov 37h,#00h
        jnb 20h.1,nq1
        mov 21h,#00h
        setb 21h.0
        ret
;
;
;       发送数据
;
;
send: 
    jb 23h.5,sende    ;如果允许发送,跳转到sende执行
        ret


sende: 
    clr ren  ;禁止接收
        mov a,21h     ;取当前通道
        mov sbuf,a    ;送到sbuf发送

waits1: 
    jnb ti,waits1 ;等待结束
        clr ti        ;
        mov a,36h     ;取当前采集的数据

waits2: 
    jnb ti,waits2
        clr ti
        setb ren      ;允许接收
        ret
;
;
;       发送之后的延时
;
;


senddelay:    
    jnb 23h.4,delayt     ;如果允许显示,则不延时
        ret

delayt: 
    jnb 23h.0,sd1
        mov 35h,#01h
        sjmp sd

sd1:    
    jnb 23h.1,sd2
        mov 35h,#0ch
        sjmp sd

sd2:    
    jnb 23h.2,sd3
        mov 35h,#19h
        sjmp sd

sd3:    
    jnb 23h.3,errordplay
        mov 35h,#7ch

sd:        
    lcall delay1ms
        djnz 35h,sd
        ret
;
;
;       显示子程序
;
;


display:
    jnb 23h.0,pt11  ;全速扫描,不显示
        ret

pt11:        
    jnb 23h.1,pt2  ;0.5秒间隔
        mov 35h,#0ch   ;设置显示循环次数
        sjmp ep

pt2:    
    jnb 23 ......

>>返回讨论的主题



  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:47毫秒 最大:3859毫秒 查询8次