论坛风格切换切换到宽版
  • 4026阅读
  • 12回复

DX,帮我看看这个程序有没有什么问题? [复制链接]

上一主题 下一主题
离线madswan
 
发帖
453
只看楼主 倒序阅读 0楼 发表于: 2004-12-04
关于用tlc2543数模转换,采集的。并送往pc上位机显示
我是根据http://www.gjwtech.com/scomm/scasinglechipdatasampletrandesign.htm上的设计来搭的电路,程序是根据武汉力源的中文手册进行了一点修改,现在只是实现对ain0的电压监测。但是为什么a/d采集的结果不对,总是fff,就是用(ref+)/2-(ref-)/做监测得到的转换结果也是fff,各位高手帮帮忙了。

我所用的电路见下面连接:

程序清单如下:
org 0000h
jmp start
clk equ p3.3
din equ p3.4
dout equ p3.5
cs equ p3.7

org 1000h
start: mov sp,#50h       ;初始化堆栈指针
    mov p3,#0ffh       ;初始化端口1的i/o管脚
    clr clk         ;设置i/o时钟为低电平
    setb cs         ;设置片选信号为高电平
    mov a,#00ffh
    acall tlc2543
    acall rs232
    jmp start

tlc2543:mov r4,#11010000b       ;读模式/通道数据到寄存器r4和a
    mov a,r4
    clr cs         ;设置片选信号为低电平
    jb acc.1,lsb       ;如果a的1位为1,则先处理lsbyte

msb: mov r5,#08         ;装载记数器初始值
loop1:mov c,dout         ;读数据位到c
    rlc a             ;a寄存器左移,移入结果数据位,移出方式通道控制位
    mov din,c         ;输出模式/通道位数据
    setb clk         ;设置i/o时钟为高电平
    clr clk           ;设置i/o时钟为低电平
    djnz r5,loop1       ;循环得到其它位
    mov r2,a           ;把msbyte(转换结果高8位)移入r2
    mov a,r4           ;把模式/通道数据放入a
    jb acc.1,return
lsb: mov r5,#08         ;装载记数器
loop2:mov c,dout         ;把数据位读入c
    rlc a             ;a寄存器左移,移入结果数据位,移出方式通道控制位
    mov din,c         ;输出模式/通道位数据
    setb clk         ;产生一个i/o脉冲
    clr clk
    djnz r5,loop2       ;循环得到其它位
    mov r3,a           ;把lsbyte移入r3
    mov a,r4           ;把模式/通道数据放入a
    jb acc.1,msb       ;如果r4的位1是1,则处理msbyte

return:ret

rs232:
mov   scon,#50h ;串口方式1工作,8位数据位,1位停止位,无奇偶校验
mov   pcon,#80h ;smod=1,波特率增倍
mov   tmod,#20h ;波特率设置,fosc=6mhz,波特率=2* 1200,n=0f3h
mov   th1,#0f3h
mov   tl1,#0f3h
setb tr1 ;启动定时器t1
mov   a,r2;
mov sbuf,a
mov   a,r2;
mov sbuf,a
ret


end
离线bd5it
发帖
2355
只看该作者 1楼 发表于: 2004-12-04
'
...
setb tr1 ;启动定时器t1
mov   a,r2;
mov sbuf,a
mov   a,r2;
mov sbuf,a
ret
end
'
...
mov a,#00ffh(写成mov a,#0ffh就可以了吧)
acall tlc2543
...

别的没仔细看,不过最后几句是否该改一下?
      mov   a,r2
      mov sbuf,a
      jnb ti,$
      clr ti
      mov   a,r2
      mov sbuf,a
      jnb ti,$
      clr ti
      ret
离线madswan
发帖
453
只看该作者 2楼 发表于: 2004-12-04
'
...
mov a,#00ffh(写成mov a,#0ffh就可以了吧)
acall tlc2543
...
别的没仔细看,不过最后几句是否该改一下?
      mov   a,r2
      mov sbuf,a
      jnb ti,$
      clr ti
      mov   a,r2
      mov sbuf,a
      jnb ti,$
      clr ti
      ret
'

你好,首先谢谢你的指点!!
但现在问题的关键不是串口传输的问题,我用我原来的程序(模式/通道字为1101,就是内部测试电压为ref+/2,按手册应该得到单极性的转换结果是800)dubeg显示r2,r3内的数据都是ff,ff.我按照你的几点意见修改程序,还是得到一样的结果
离线bd3vz
发帖
544
只看该作者 3楼 发表于: 2004-12-04
楼上朋友讲的寄存器r2,r3数据出乎意料。结果都是ffh,我以前在编写一段程序时也出现过这种现象。最后只通过软仿真就找到了问题所在,不过我那时的目标板不涉及外部数据的采集。涉及外部数据采集的应用。一般用硬件仿真器一般是可以找到问题所在的!况且这个程序也不算是太复杂。以我之见:配合硬件仿真,主要观察d/a转换这部分,仔细观察在转换的过程中应用到r2,r3的送数指令及其inc,dec, djnz 这几个指令的地方。
离线BD6KF
发帖
1126
只看该作者 4楼 发表于: 2004-12-05
你这个程序缺了好多,,,但这个程序运行下来r2,r3一定是ff。在msb段程序中有这几句
rla a(a左移一位)
djnz r5,loop(a左移8次无论原来a中是什么数,现在一定是ff)
mov r2,a(这句还用说么)
离线BD6KF
发帖
1126
只看该作者 5楼 发表于: 2004-12-05
把setb clk放到loop1:位置     clr clk放到djnz r5,loop1后
离线bg6qbv
发帖
5837
只看该作者 6楼 发表于: 2004-12-05
'
你好,首先谢谢你的指点!!
但现在问题的关键不是串口传输的问题,我用我原来的程序(模式/通道字为1101,就是内部测试电压为ref+/2,按手册应该得到单极性的转换结果是800)dubeg显示r2,r3内的数据都是ff,ff.我按照你的几点意见修改程序,还是得到一样的结果
'

楼主,还有pcb吗?能否购两块,我也来diy学习一下!!!!!
离线madswan
发帖
453
只看该作者 7楼 发表于: 2004-12-05
刚才我又检查了一下程序,通过单步debug单步执行,发现在loop中,每次mov c,dout
这个命令总是使c标志变成1,为什么dout总是1????这样的话也难怪每次的转换结果不管高位还是低位都是ff。
但是根据数据手册,dout应该是转换结果移位输出呀!!!!
这到底是怎么回事??
离线BD6KF
发帖
1126
只看该作者 8楼 发表于: 2004-12-06
cs顺序对不对试验一下。。。。。。。。
离线madswan
发帖
453
只看该作者 9楼 发表于: 2004-12-06
'
cs顺序对不对试验一下。。。。。。。。
'
应该是对的,我都检查了好几遍了。。
另外我用用的是6mhz晶振,没有问题吧
离线madswan
发帖
453
只看该作者 10楼 发表于: 2004-12-06
rs232:
mov scon,#50h ;串口方式1工作,8位数据位,1位停止位,无奇偶校验
mov pcon,#80h ;smod=1,波特率增倍
mov tmod,#20h ;波特率设置,fosc=6mhz,波特率=2* 1200,n=0f3h
mov th1,#0f3h
mov tl1,#0f3h
setb tr1 ;启动定时器t1
mov a,r2;
mov sbuf,a
mov a,r3;
mov sbuf,a
ret



大家帮我看看,我的rs232子程序有没有什么问题??
我的pc端用端口调试软件sscom3.2看不见送过来的数据。
而在如果把其中改为
mov a,r2;
mov sbuf,#56h
mov a,r3;
mov sbuf,#0afh
则这两个数据都能显示,为什么???
离线madswan
发帖
453
只看该作者 11楼 发表于: 2004-12-08
搞定                         
离线bg4jj
发帖
5094
只看该作者 12楼 发表于: 2004-12-10
说说具体的错误之处吧
也算是一个结果
:)