搜索
bottom↓
回复: 5

一段关于LCM128647写数据/指令的程序,谁能帮忙解释一下

[复制链接]

出0入0汤圆

发表于 2007-11-29 22:20:33 | 显示全部楼层 |阅读模式
马老师你好:
    我最近用MEGA64调试LCM128647,有段程序不懂,马老师能否帮忙解释一下?
;****************************************************************************************
;        写LCD模块左半部分指令
;        指令输入:r17
;****************************************************************************************
WriteLeftLCDIns:
;
                lds r16, LCDCRAddrL
                sbrc r16, LCDBusy
                rjmp WriteLeftLCDIns
;
                sts LCDCWAddrL, r17
;
                ret
;****************************************************************************************
;        写LCD模块左半部分数据
;        数据输入:r17
;****************************************************************************************
WriteLeftLCDData:
                lds r16, LCDCRAddrL
                sbrc r16, LCDBusy
                rjmp WriteLeftLCDData
;
                sts LCDDWAddrL, r17
                ret
1.其中LCDCRAddrL和LCDCWAddrL及LCDDWAddrL是指什么?怎么定义?谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-11-30 20:16:52 | 显示全部楼层
照搬的程序?自己有汇编的基础吗?没有先老老实实的学,把基础打好.

1.查看搬来程序的头部,或.H文件,里面应该有LCDCRAddrL和LCDCWAddrL及LCDDWAddrL的定义.

2.LCDCRAddrL和LCDCWAddrL及LCDDWAddrL应该是定义的3个RAM空间地址,该地址对应LCD的3个接口.从字面看
  LCDCRAddrL 为LCD的控制寄存器读地址的低8位
  LCDCWAddrL 为LCD的控制寄存器写地址的低8位
  LCDDWAddrL 为LCD的数据存器写地址的低8位

能明白吗?另外知道LCDBusy是什么吗?

出0入0汤圆

 楼主| 发表于 2007-11-30 21:28:22 | 显示全部楼层
1.这是老板以前写的一个框架,里面没有三个参数的定义.我以前用51调试过12232的液晶,读状态和写指令,数据都是通过I/O口和时序操作,原理很明朗.其实我知道三个参数的意思,但不知道是怎么定义,与什么有管?马老师能否拿其中一参数具体讲讲?
   2.LCDBusy是测忙碌的,这个俺知道.
   3.液晶可以不用时序读写数据吗?

出0入0汤圆

发表于 2007-12-1 00:28:25 | 显示全部楼层
从这段代码分析,可能使用的AVR带并口总线扩展的,LCD是采用并口总线连接使用(速度快),不是采用I/O方式操作的.

在指令中LCDCRAddrL是内存空间(外扩)的地址,估计是映射到LCD控制寄存器的低8位,读该地址即读LCD控制寄存器低字节.


;****************************************************************************************
;        写LCD模块左半部分指令
;        指令输入:r17
;****************************************************************************************
WriteLeftLCDIns:
;
                lds r16, LCDCRAddrL ;读LCDCRAaddL(内存空间单元)数据到寄存器r16
                sbrc r16, LCDBusy   ;LCDBusy应该是LCDCR寄存器中的一位,上面在r16中读到了该寄存器的数,
                                    ;本句判断LCDBusy是否为为"0";"1"表示忙.sbrc指令为判寄存器某位为0则跳过一条指令执行.
                rjmp WriteLeftLCDIns;不为"0"执行该句,转上句循环读
;
                sts LCDCWAddrL, r17 ;为"0"跳过上句,执行本句.
;
                ret

出0入0汤圆

 楼主| 发表于 2007-12-1 11:00:55 | 显示全部楼层
.equ        LCDPORT                = PORTC       
.equ        LCDA0                = PINE3
.equ        LCDRD                = PINE4
.equ        LCDWR                = PINE5
.equ        LCDCS1                = PINE6
.equ        LCDCS2                = PINE7
.equ        LCDELEN                = PINF0
硬件复位,这种接法不是I/O口间接访问吗? AVR带并口总线扩展是不是指的地址总线方式? 51里P0为低地址,P2为高地址,那AVR中地址是怎么分配呢?

出0入0汤圆

发表于 2007-12-1 20:41:03 | 显示全部楼层
只有第一个定义是一个寄存器:PORTC,其它是数字3\4\5\6\7\0.

还需要硬件图和更多东西定义才能知道.另外,你需要先好好学习AVR,这样才能真正看懂AVR的汇编.
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 11:50

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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