工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 3820|回复: 16

[经验]RS232双机通信(汇编)课程设计经验分享

[复制链接]
发表于 2005-12-20 17:32 | 显示全部楼层 |阅读模式
我是02电子信息的,大三的时候汇编课是乐金松老师教的,当时的课程设计是做一个rs232双机通信的聊天程序。

我当时花了一个星期把它搞掂了,后来还加了很多花哨的功能,比如发送进度条,字符计数器,自定义界面,自定义铃声等等功能。

我这里把我当时的文档(实验报告)贴出来,给师弟师妹一个参考。还有我贴下部分源代码(子程序),希望对师弟师妹有帮助。

下载两个附件,将附件1的后缀改成.doc(word文档),第二个改成.exe(作品,可执行文件)

[ Last edited by wool王 on 2005-12-20 at 09:39 ]
 楼主| 发表于 2005-12-20 17:33 | 显示全部楼层
如果大家有心做电子方面的开发,奉劝大家好好学汇编,对于电子专业来说汇编是相当重要的,在大四找工作时笔试面试经常考的。而且,汇编学得好,对于大三下学期的单片机课程是个基础,如果汇编(微机原理)学得不好的话,学单片机会很吃力。
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:40 | 显示全部楼层
;;扬声器发声子程序
;;入口参数di为方波频率
sound                proc        near
                push        ax
                push        bx
                push        cx
                push        dx
                push        di
               
                ;;初始化8253芯片
                mov        al,0b6h                ;计数器2,初值16位,方式3,二进制格式
                out        43h,al
               
                mov        dx,12h
                mov        ax,348ch        ;dxax=1.193182MHz
                div        di        ;di为待定频率
                out        42h,al        ;发送低字节
                mov        al,ah
                out        42h,al        ;发送高字节
               
                in        al,61h        ;开扬声器8255
                mov        ah,al        ;将扬声器初始值暂放到ah
               
                or        al,03h        ;使pb0和pb1为1
                out        61h,al
               
                ;;延时
                mov        dl1,0
                mov        dl2,03ffh
                call        delay
               
                ;;恢复8255的pb口,关闭扬声器
                mov        al,ah
                out        61h,al
               
                pop        di
                pop        dx
                pop        cx
                pop        bx
                pop        ax
                ret
sound                endp
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:41 | 显示全部楼层
;;通信接收子程序
;;无入口参数,出口参数rd_buffer保存接收字节,该字段为特定字段
rd_com                proc        near
                mov        dx,3fdh
                in        al,dx
                test        al,01h
                jz        rd_exit
                mov        dx,3f8h
                in        al,dx
                mov        rd_buffer,al
rd_exit:        ret
rd_com                endp
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:41 | 显示全部楼层
;;屏幕显示程序
;;入口al为字符,ah为字符属性,cx为位置
display                proc        near
                ;;重要公式:排列位置的求法如下
                ;;位置buffer=row*160+col*2
                ;;ch=row,cl=col
                push        bx
                push        cx
                push        ax
                mov        al,160
                mul        ch
               
                mov        bl,cl
                rol        bl,1        ;相当于bl*2
                mov        bh,0
                add        bx,ax
                pop        ax
                mov        es:[wd_buffer+bx],ax
                pop        cx
                pop        bx
                ret
display                endp

;;清屏程序
;;入口cx为起点,dx为终点,bh为空白行属性,al为上滚行数(一般设为0)
clr_screen        proc        near
                mov        ah,06h
                int        10h
                ret
clr_screen        endp
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:41 | 显示全部楼层
;;bcd码转换子程序
;;入口参数binary,出口参数bcd0到bcd1,已压缩
to_bcd        proc        near
                mov        cx,2
                lea        bx, [bcd0]
clr_buffer:        mov        byte ptr [bx],0
                inc        bx
                loop       clr_buffer
                mov        cx,16

do_loop:        clc        
                rcl        binary,1

                mov        al,bcd0
                adc        al,al
                daa        
                mov        bcd0,al
                mov        al,bcd1
                adc        al,al
                daa
                mov        bcd1,al
               
                loop       do_loop
                ret
to_bcd        endp
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:42 | 显示全部楼层
;;显示方框
;;table_top=开始行,table_buttom=结束行,table_left=开始列,table_right=结束列,table_asc=图形asc码,glb_count为计数器
display_table        proc        near
                dec        table_top
                dec        table_buttom
                dec        table_left
                dec        table_right
                push        ax
                push        bx
                mov        al,table_buttom
                sub        al,table_top
                inc        al
                mov        bl,table_right
                sub        bl,table_left
                inc        bl
                mul        bl
                mov        glb_count,ax
                pop        bx
                pop        ax
                mov        ch,table_top
                mov        cl,table_left
display_table1:        mov        al,00h
                cmp        ch,table_top
                jz        display_go_on
                cmp        ch,table_buttom
                jz        display_go_on
                cmp        cl,table_left
                jz        display_go_on
                cmp        cl,table_right
                jz        display_go_on
                jmp        display_go_on1
display_go_on:        mov        al,table_asc
display_go_on1:        call        display
                inc        cl
                cmp        cl,table_right
                jc        no_cfs
                je        no_cfs
                mov        cl,table_left
                inc        ch
no_cfs:                dec        glb_count
                jnz        display_table1
                ret
display_table        endp
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:42 | 显示全部楼层
;;文字显示模块(注:以此子程序代替dos中断中的09h号中断)
;;cx=显示起点,bx=文字起点,ah=文字属性,dl=右边临界(注:利用这个判断换行),dh保留为列起点
display_word        proc        near
                mov        dh,cl
display_word1:        mov        al,[bx]
                cmp        al,'$'
                jz        display_word3
                call        display
                inc        cl
                cmp        cl,dl
                jnz        display_word2
                inc        ch
                mov        cl,dh
display_word2:        inc        bx
                jmp        display_word1
display_word3:        ret
display_word        endp
回复

使用道具 举报

 楼主| 发表于 2005-12-20 17:43 | 显示全部楼层
贴这么多。

如果有任何疑问欢迎交流,MSN:[email protected]
回复

使用道具 举报

发表于 2005-12-23 14:57 | 显示全部楼层
雪中送炭啊!我们也是乐金松老师教的!非常感谢楼主!
回复

使用道具 举报

发表于 2005-12-27 14:02 | 显示全部楼层
文件下载不了啊!!
回复

使用道具 举报

发表于 2005-12-27 17:47 | 显示全部楼层
附件文件不存在或无法读入,请与管理员联系。
回复

使用道具 举报

发表于 2006-1-1 20:46 | 显示全部楼层
师兄,你好!我是信工03级的师弟,最近急着要交汇编课程设计报告:rs232双机通信的聊天程序,是乐金松老师教的。知道你这里有,无比感激!不过下载不了,能否发word文档给我([email protected])参考参考,非常谢谢!
回复

使用道具 举报

 楼主| 发表于 2006-1-2 00:59 | 显示全部楼层
现在后院的文件好像都下载不了了。

wonders我发给你了
回复

使用道具 举报

发表于 2006-1-5 21:42 | 显示全部楼层
就是下载不了~~

能发给我一份吗~~

03通信的王子~~~~~~

谢谢  我的邮箱~  [email protected]
回复

使用道具 举报

发表于 2006-1-5 22:01 | 显示全部楼层
LZ你来得正是时候啊~~~我也正需要这个~~~
麻烦LZ也给我发一份吧~~恩人啊~~~~
偶的邮箱[email protected]
回复

使用道具 举报

发表于 2006-1-6 17:39 | 显示全部楼层
救救兄弟我
   给我一份
谢谢了
   [email protected]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2024-5-16 14:21

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表