| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 509 人关注过本帖
标题:向大虾些求教~ 希望多指点~
只看楼主 加入收藏
zhouzhuia
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-15
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
向大虾些求教~ 希望多指点~
哪位大虾些帮忙看看下面的程序~ 不知道这么的~ 就是在最后delay定义的时候老是要出错误~ 不知道哪位大哥能帮我解决下~ 就是
delay   proc near                             ;延时子程序
        push cx
        mov cx,0ffffh
pp:     loop pp
        pop cx
        ret
delay   endp
这块地方有错~ 大哥些帮帮忙啊~ 江湖救急啊~
data segment                                               ;数据段
io8255a equ 288H                                           ;8255的A口地址
io8255b equ 289H                                           ;8255的B口地址
io8255c equ 28aH      ;8255的C口地址
io8255con equ 28bH                                          ;8255A的控制口地址
ctr     db 'enter c key to continue!',0ah,0dh               ;程序初始提示信息
        db 'enter other keys to exit to dos!',0ah,0dh,'$'
ctr01   db '1. zuo zhuan wan.....',0ah,0dh,'$'         ;左转弯时提示信息(以下类似)
ctr02   db '2. you zhuan wan.....',0ah,0dh,'$'
ctr03   db '3. jin ji kai guan he shang.....',0ah,0dh,'$'
ctr04   db '4. sha che.....',0ah,0dh,'$'
ctr05   db '5. zuo zhuan wan sha che.....',0ah,0dh,'$'
ctr06   db '6. you zhuan wan sha che.....',0ah,0dh,'$'
ctr07   db '7. jin ji sha che.....',0ah,0dh,'$'
ctr08   db '8. jin ji zuo zhuan sha che.....',0ah,0dh,'$'
ctr09   db '9. jin ji you zhuan sha che.....',0ah,0dh,'$'
ctr10   db '10. ting kao.....',0ah,0dh,'$'
data ends


stack segment stack                                           ;堆栈段
sta dw 50 dup(?)
stack ends
code segment                                                ;代码段
      assume cs:code,ds:data,es:data,ss:stack
main proc far
start: push ds
        sub ax,ax
        push ax
        mov ax,data
        mov ds,ax
        mov es,ax

ccc:    mov dx,offset ctr      ;显示提示信息
        mov ah,09h
        int 21h
        mov ah,01h
        int 21h
        cmp al,'c'             ;若输入‘C’,则继续执行,否则返回到DOS
        jz eee
        mov ax,4c00h
        int 21h

eee:    mov dx,io8255con       ;给8255A送入方式控制字89H 设置为A口输出,C口输入(因为实验箱上没B口)
        mov al,89h
        out dx,al
      
        mov dx,io8255c         ;将4个开关的状态送入AL
        in   al,dx
      
        mov cx,0020h           ;设置循环次数
bb1:    cmp al,01h             ;将al的值依次与01H到0AH比较
        jnz bb2                ;不是01H则转bb1执行,是则调用中断在屏幕上显示相应提示信息,顺序执行下去
        mov dx,offset ctr01
;左转弯状态,实现六盏灯状态为:闪、灭、闪、灭、闪、灭
        mov ah,09h
        int 21h                ;调用09号中断,在屏幕上显示现在正处于左转弯状态
        mov dx,io8255a
left:   mov al,11101010b   ;六盏灯状态为:亮、灭、亮、灭、亮、灭(最高两位没影响)
        out dx,al
        call delay0         ;调延时子程序
        loop left
        jmp ccc

bb2:    cmp al,02h
        jnz bb3
        mov dx,offset ctr02
;右转弯状态,实现六盏灯状态为:灭、亮、灭、亮、灭、亮
        mov ah,09h
        int 21h
        mov dx,io8255a

right: mov al,11010101b ;六盏灯状态为:灭、亮、灭、亮、灭、亮
        out dx,al
        call delay0
        loop right
        jmp ccc

bb3:    cmp al,03h
        jnz bb4
        mov dx,offset ctr03 ;紧急开关合上
        mov ah,09h
        int 21h
        mov dx,io8255a

hurry: mov al,11000000b   ;六盏灯状态为:闪、闪、闪、闪、闪、闪
        out dx,al
        call delay0
        mov al,11111111b
        out dx,al
        call delay0
        loop hurry
        jmp ccc

bb4:    cmp al,04h
        jnz bb5
        mov dx,offset ctr04     ;刹车
        mov ah,09h
        int 21h
        mov dx,io8255a

break:   mov al,11000011b ;六盏灯状态为:灭、灭、灭、灭、亮、亮
        out dx,al
        call delay0
        loop break
        jmp ccc

bb5:    cmp al,05h
        jnz bb6
        mov dx,offset ctr05   ;左转弯刹车
        mov ah,09h
        int 21h
        mov dx,io8255a

leftbreak: mov al,11001010b   ;六盏灯状态为:亮、灭、亮、灭、亮、灭
            out dx,al
            call delay0
            loop leftbreak
            jmp ccc

bb6:    cmp al,06h
        jnz bb7
        mov dx,offset ctr06    ;右转弯刹车
        mov ah,09h
        int 21h
        mov dx,io8255a

rightbreak: mov al,11000101b ;六盏灯状态为:灭、亮、灭、亮、灭、亮
             out dx,al
             call delay0
             loop rightbreak
             jmp ccc

bb7:    cmp al,07h
        jnz bb8
        mov dx,offset ctr07    ;紧急刹车
        mov ah,09h
        int 21h
        mov dx,io8255a

hurrybreak: mov al,11111111b ;六盏灯状态为:亮、亮、亮、亮、亮、亮
             out dx,al
             call delay0
             loop hurrybreak
             jmp ccc
              
bb8:    cmp al,08h
        jnz bb9
        mov dx,offset ctr08    ;紧急左转刹车
        mov ah,09h
        int 21h
        mov dx,io8255a

hurryleftbreak: mov al,11111111b ;六盏灯状态为:亮、亮、亮、亮、亮、亮
                 out dx,al
                 call delay0
                 mov al,11011111b
                 out dx,al
                 call delay0
                 loop hurryleftbreak
                 jmp ccc

bb9:    cmp al,09h
        jnz bb10
        mov dx,offset ctr09    ;紧急右转刹车
        mov ah,09h
        int 21h
        mov dx,io8255a
hurryrightbreak: mov al,11111111b ;六盏灯状态为:亮、亮、亮、亮、亮、亮
                  out dx,al
                  call delay0
                  mov al,11101111b
                  out dx,al
                  call delay0
                  loop hurryrightbreak
                  jmp ccc

bb10:   cmp al,0ah
        jnz bb11
        mov dx,offset ctr10   ;停靠
        mov ah,09h
        int 21h
        mov dx,io8255a

stop:   mov al,11001100b        ;六盏灯状态为:灭、灭、亮、亮、闪、闪
        out dx,al
        call delay0
        mov al,11001111b
        out dx,al
        call delay0
        loop stop
        jmp ccc
      
bb11:   jmp ccc
        ret   
main    endp


delay   proc near                             ;延时子程序
        push cx
        mov cx,0ffffh
pp:     loop pp
        pop cx
        ret
delay   endp

delay0 proc near                             ;延时子程序
        push cx
        push ax
        mov cx,0080h
pp0:    call delay
        loop pp0
        pop ax
        pop cx
        ret
delay0 endp

code    ends
        end start

 
搜索更多相关主题的帖子: 子程序 江湖 
2011-04-15 09:06
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:10 
我编译运行了,没发觉有错么,不知道你说的定义错是指什么意思

技术问题,请不要以短消息方式提问
2011-04-15 09:40
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:10 
注释掉
comment /
delay   proc near                            ;延时子程序
        push cx
        mov cx,0ffffh
pp:     loop pp
        pop cx
        ret
delay   endp
/
把前面那一段注释掉,或者直接删掉


[ 本帖最后由 xiaomarn 于 2011-4-15 11:23 编辑 ]
2011-04-15 11:18
zhouzhuia
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-15
收藏
得分:0 
我已经搞清楚了~  原来是注释出现了点问题~  谢谢了~  不过后面那个START   好像不该成MAIN运行还是有点问题~
2011-04-15 16:20
zhouzhuia
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2011-4-15
收藏
得分:0 
~~~ 经过修改过后~  是能运行了~  但是生成EXE文件后,却不能达到我想要的目的~  不知道哪出错了~  希望能得到指点~  下面是我要得到的目的~
一、设计目标
模拟制作一套汽车信号灯微机控制系统,该系统可以正确反映驾驶操作与灯光信号的对应关系。
二、设计要求
汽车控制所需执行的操作包含左转弯、右转弯、应急、脚刹车、手刹车,这些操作均由相应的开关状态反映,所需控制的信号灯有:仪表盘左/右转弯信号指示灯、手刹抬起信号指示灯、左右头灯和左右尾灯,其驾驶操作与灯光信号对应关系如下:
1. 左/右转弯灯开关(合上时):仪表盘左/右转弯信号指示灯、左/右头灯、左/右尾灯闪烁。
2. 紧急开关合上:所有灯闪烁。
3. 刹车(合上刹车开关):左右尾灯亮。
4. 左/右转弯刹车:左/右转弯灯、左/右头灯、左/右尾灯闪烁,右/左尾灯亮。
5. 刹车、合上应急开关:尾灯亮、仪表盘左/右转弯信号指示灯和头灯都闪烁。
6. 左/右转弯刹车,并合上紧急开关:右/左尾灯亮,其余灯闪烁。
三、设计提示
1. 引脚信号定义
采用8255A的PA口作为开关控制,PB口作为灯的控制,开关与灯的逻辑关系(1表示开关合上,0表示打开;1表示灯亮,1(闪)表示闪烁,0表示熄灭)
表14.3  8255控制信号灯逻辑关系表
图片附件: 游客没有浏览图片的权限,请 登录注册

2. 工作原理
由要求可知,汽车信号灯控制系统可分为:左转、右转、刹车、应急开关闭合、手刹停车五种基本操作,而按要求又可组合为十组操作,即左转、右转、应急开关合、刹车、左转刹车、右转刹车、刹车并合上应急开关、左转刹车并合上应急开关、右转刹车并合上应急开关和拉上手刹并停靠。因此,可以分别设计十个子程序表示以上的十种操作功能。
五个开关输入分别控制五种基本操作,而CPU处理数据时是以字节处理,故在编写原代码时只用其中的五位。输出为两个头灯、两个尾灯、三个仪表板灯,(可采用发光二极管代替)。同上,为便于处理,程序中也是采用八位,但在接线时接七位就可以了。
在实现五个开关控制七个发光二极管时,主要是利用软件实现。软件实现:整体上采用子程序分支调用,局部对需要闪烁的状态来说则采用循环延时来实现,其余则采用顺序执行的方式;如果用硬件控制灯光闪烁,则需采用定时/计数器8253,在输入一定时钟脉冲的情况下,实现定时计数功能。
2011-04-15 18:57
快速回复:向大虾些求教~ 希望多指点~
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022690 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved