6757|14

59

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

老师,我想问你个问题 [复制链接]

我用T0接收脉冲,T1定时50ms(晶振的固有频率是11.0592MHZ),最后我把T0的高八位和低八位分别给A,B.那么我怎么显示所计的数据呢?我需要这个程序呢
此帖出自单片机论坛

最新回复

;P ;P  详情 回复 发表于 2010-12-2 10:01
点赞 关注
 

回复
举报

27

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
学习中,感谢分享,谢谢
此帖出自单片机论坛
 
 

回复

2131

帖子

0

TA的资源

至上芯片

板凳
 
课本上应该都有吧!
把T0的高八位和低八位分别给A,B.那么我怎么显示所计的数据呢?
你不是能得到数据吗?
此帖出自单片机论坛
 
个人签名处处留心皆学问!
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

4
 

你的老师能保证看到吗,我来回答行不行啊?

由于T0的高、低8位均是16进制的,所以不能直接将这4个数据拿来显示,要转换为BCD码以后才能用于显示。
那你想就统计50mS时间段内的T0值,还是若干个50mS(例如20个为1S)里总计的T0值呢?
这个你自己根据需要决定吧,我仅提供一个拆分为BCD码的程序给你,你可以拿这些BCD码去送显示BUF,以便显示。由于BA寄存器要做更重要的

用途,所以将TH0\TL0分别存放在7FH\7EH中。把AB腾出来。
编程思路是:
我们先用7FH\7EH除以10000,商为十进制的万位数;
余数送7FH\7EH,再除以1000,商为十进制的千位数;
余数再送7FH\7EH,再除以100,商为十进制的百位数;
余数再送7FH\7EH中,再除以10,商为十进制的十位数;
最终余数为十进制的个位数;
10000=2710H
1000=03E8H
100=0064H
10=000AH
C语言做这道题比较简单,只需要定义int型的变量就可以直接作除法。这里给你一个汇编的,程序较长。
设:被除数高字节7FH中为TH0,被除数低字节7EH中为TL0,除数高字节存放于7DH,除数低字节存放于7CH中(除数为2710H\03E8H\0064H\000AH

共4种),转换后的十进制BCD码存放在74H73H72H71H70H连续5个内存单元中
要想做多字节除法,用减多次的方法,首先要判断够不够减,够减就减一次,商加1,不够减就再求低一位的十进制数,要用到以下几个子程序



;完整的子程序如下:
HEX_DEC:
                CLR A;将5个BCD单元清零
                MOV 74H,A
                MOV 73H,A
                MOV 72H,A
                MOV 71H,A
                MOV 70H,A
                MOV 7FH,TH0;传计数值被除数高8位
                MOV 7EH,TL0;传计数值被除数低8位
;先求万位数
                MOV 7DH,#27H;传除数高8位
                MOV 7CH,#10H;传除数低8位
LOOP_W:
                LCALL COM_SUB;看看够不够减
                JC BU_GOUJIANW;不够减
                INC 74H;商+1
                LCALL SUBWORD;做一次减法
                SJMP LOOP_W;万位数循环

;再求千位数
BU_GOUJIANW:
                MOV 7DH,#03H;传除数高8位
                MOV 7CH,#0E8H;传除数低8位
LOOP_Q:
                LCALL COM_SUB;看看够不够减
                JC BU_GOUJIANQ;不够减
                INC 73H;商+1
                LCALL SUBWORD;做一次减法
                SJMP LOOP_Q;千位数循环

;又求百位数
BU_GOUJIANQ:
                MOV 7DH,#00H;传除数高8位
                MOV 7CH,#64H;传除数低8位
LOOP_B:
                LCALL COM_SUB;看看够不够减
                JC BU_GOUJIANB;不够减
                INC 72H;商+1
                LCALL SUBWORD;做一次减法
                SJMP LOOP_B;百位数循环

;还求十位数
BU_GOUJIANB:
                MOV 7DH,#00H;传除数高8位
                MOV 7CH,#0AH;传除数低8位
LOOP_S:
                LCALL COM_SUB;看看够不够减
                JC BU_GOUJIANS;不够减
                INC 71H;商+1
                LCALL SUBWORD;做一次减法
                SJMP LOOP_S;十位数循环


;最后,个位数不用求了,最终余数就是!
BU_GOUJIANS:
                MOV 70H,7EH
                RET

;判断是否够减子程序,结果在C中,C=0够减;C=1不够减
COM_SUB:
                MOV A,7FH;传高8位
                CJNE A,7DH,COM_END;高8位不相等
                MOV A,7EH;高8位相等,传低8位
                CJNE A,7CH,COM_END
COM_END:;不相等就得出哪个大哪个小的结论了
                RET;

;双字节数的减法子程序,差还回到被减数的单元中
SUBWORD:
                CLR C
                MOV A,7EH
                SUBB A,7CH;
                MOV 7EH,A
                MOV A,7FH
                SUBB A,7DH;
                MOV 7FH,A
                RET
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

5
 
楼上程序已经经过测试
软件测试:将TH0和TL0中置FFFFH,经过模拟仿真,74H~70H中为65535
此帖出自单片机论坛
 
 
 

回复

67

帖子

0

TA的资源

纯净的硅(高级)

6
 
LS的同志的程序学习了~不过我觉得应该有更简洁的方法:

首先,P1口接8个LED;然后

MOV P1,A
插入个延时子程序
MOV P1,B

搞定。
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

67

帖子

0

TA的资源

纯净的硅(高级)

7
 
[quote]原帖由 xu__changhua 于 2009-4-25 16:43 发表
由于T0的高、低8位均是16进制的,所以不能直接将这4个数据拿来显示,要转换为BCD码以后才能用于显示。


还要用BCD器件转换,比较麻烦吖
此帖出自单片机论坛
 
 
 

回复

142

帖子

0

TA的资源

五彩晶圆(初级)

8
 
一个只显示千、百位的,0.6秒取样一次。
a_bit   EQU 20h          ;数码管百位数存放内存位置
b_bit   EQU 21h          ;数码管千位数存放内存位置

        ORG 0000H
        AJMP START
        ORG 001BH
        LJMP CESU
        ORG 30H
START:  MOV SP,#5FH
        MOV TMOD,#00010101B
        MOV TH0,#0
        MOV TL0,#0
        MOV TH1,#3CH           ;100毫秒(6M)
        MOV TL1,#0B0H
        MOV B,#10
        MOV R7,#00H
        SETB EA
        SETB ET1
        SETB TR1
        SETB TR0
LOOP:   ACALL DISP              ;显示子程序
        AJMP LOOP
CESU:   INC R7
        MOV A,R7
        CJNE A,#6,ZAILAI
        CLR TR0                        ;关记数器T0
        MOV A,TL0                 ;计数有限,只用了低8位
        DIV AB                  ;转十进制
        MOV A_BIT,B
        MOV B_BIT,A
        MOV R7,#0
        MOV B,#10
        MOV TH0,#0
        MOV TL0,#0
        SETB TR0                ;开记数器T0
ZAILAI: MOV TH1,#3CH
        MOV TL1,0B0H
        RETI

DISP:   MOV A,A_BIT             ;取个位数
        MOV DPTR,#numta         ;指定查表启始地址
        MOVC A,@A+DPTR          ;查个位数的7段代码
        MOV P1,A                ;送出个位的7段代码
        CLR P3.3                ;开个位显示
        ACALL D2MS              ;显示2毫秒
        SETB P3.3               ;关闭个位显示
        MOV A,B_BIT             ;取十位数
        MOV DPTR,#numtb
        MOVC A,@A+DPTR          ;查十位数的7段代码
        MOV P1,A                ;送出十位的7段代码
        CLR P3.7                ;开十位显示
        ACALL D2MS              ;显示2毫秒
        SETB P3.7               ;关闭十位显示
        RET

D2MS:   MOV R0,#50                ;2MS延时
D1:     MOV R1,#10
        DJNZ R1,$
        DJNZ R0,D1
        RET
numta:  DB 30H,0FCH,0A2H,0A4H,06CH,25H,21H,0BCH,20H,24H
numtb:  DB 10H,0DCH,82H,84H,4CH,5H,1H,9CH,0H,4H
        END

[ 本帖最后由 laobo 于 2009-4-27 17:38 编辑 ]
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

59

帖子

0

TA的资源

纯净的硅(高级)

9
 

回复 4楼 xu__changhua 的帖子

嘿嘿,老师,谢谢你。
老师,以后我有不理解的还要麻烦你的。
嘿嘿,老师,谢谢。
此帖出自单片机论坛
 
 
 

回复

38

帖子

0

TA的资源

纯净的硅(中级)

10
 
建议运算使用C好些
unsigned  int  data;//定义一个整形变量,将计数器中断结果送给他
//如果显示buff为:ucbuf0、ucbuf1、ucbuf2、ucbuf3、ucbuf4
//处理程序如下:
ucbuf0=data/10000;                       //最高位
ucbuf1=(data%10000)/1000;
ucbuf2=(data%1000)/100;
ucbuf3=(data%100)/10;
ucbuf4=data%10;                          //最低位
此帖出自单片机论坛

赞赏

1

查看全部赞赏

 
 
 

回复

59

帖子

0

TA的资源

纯净的硅(高级)

11
 

回复 10楼 xujh 的帖子

老师,五一到了,五一快乐!
此帖出自单片机论坛
 
 
 

回复

59

帖子

0

TA的资源

纯净的硅(高级)

12
 

15075018luerdu

老师,五一期间我不回家的。想利用这几天好好复习一下以前学的知识的。对于单片机的复习我似乎没有定力的,感觉学的差不多,但有感觉学的不够好。老师,我矛盾呀。老师,我该怎样复习呢。
此帖出自单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 

4楼的程序很好

用了4楼的贴子很好用
此帖出自单片机论坛
 
 
 

回复

16

帖子

0

TA的资源

一粒金砂(初级)

14
 

zhongduan()
{
 TMOD = 0x10;
 TH1 = (65536-50000)/256;     
 TL1 = (65536-50000)%256;
 ET1 = 1;
 EA =  1;
 PT1 = 1;
 TR1= 1;

}

 

maina() interrupt 3
{

TH1 = (65536-50000)/256;
TL1 = (65536-50000)%256;
i++;
if (i == 20)
{
miao = miao+1;
i = 0;
}
if (miao == 60)
{
fen = fen+1;
miao = 0;
}
if (fen == 60)
{
shi = shi+1;
fen  = 0;
}
if (shi ==60)
{
shi = 0;
}
}

此帖出自单片机论坛
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

15
 
;P ;P
此帖出自单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表