论坛风格切换切换到宽版
  • 23448阅读
  • 107回复

我为论坛做贡献之频率计二 [复制链接]

上一主题 下一主题
离线淡荣生
发帖
344
只看该作者 80楼 发表于: 2009-03-17
'
仔细一想,又感到有问题,预分频器是不能读写的啊。那么分辨率就是256赫兹了。
还希望能解答,谢谢!
'

; 1.由pic16f84a为核心的35mhz频率计
; 2.lcd显示,4位传输模式,七位数字显示
; 3.闸门时间为0.1秒,精度10hz
; 4.0.1秒内的计数结果在higb、midb、lowb三个单元内
; 5.(higb:midb) × 256 + (lowb)
; 4.编程流程:
;   (1)定义各寄存器,lcd及定时参数设置
;   (2)各寄存器清零,各端口及tmr0的设置
;   (3)lcd初始化
;   (4)设定0.1秒定时,ra3设为输入时开始测量
;   (5)测试当tmr0溢出(higb)+1
;   (6)ra3设为输出时停止测量
;   (7)采集测量到的数据(time)→ higb, (tmr0)→ midb, (预分频器)→ lowb
;   (8)数据处理
;     ①(higb:midb) × 256 + (lowb)
;     ②3单元bin → 4单元压缩bcd
;     ③4单元压缩bcd → 8个非压缩bcd  
;     ④8个非压缩bcd → 8个ascⅡ字符
;   (9)字符送lcd显示
;   (10)go(4)



           movlw      b�'      ;
           movwf      trisa          ; ra3设置为输出,关闭计数闸门,停止测量
           bcf            status,rp0      ;
     
           btfsc            intcon,2      ; 确定最终最高计数器的值
           incf            time,f
           bcf            intcon,2
     
; ---------------------------------------------------------------------------------------------------------------------------------------
; 采集三个单元的计数值 (time) → higb,(tmr0) → midb,(预分频器) → lowb
           movf            tmr0,w
           movwf      midb            ; (tmr0) → midb
           movf            time,w
           movwf      higb            ; (time) → higb
           clrf            temp0            ; 以下分析预分频器内的值

countit      incf            temp0,f            
           bsf            porta,3      ; 产生模拟脉冲使预分频器计数
           bcf            porta,3      ;
           bcf            intcon,2      ; 清溢出标志
           movf            tmr0,w      ;
           bcf            status,z      ;
           subwf      midb,w            ; (midb) - (tmr0) → w
           btfsc            status,z      ; 预分频器溢出则跳
           goto            countit      ;
           incf            temp0,f      ;
           comf            temp0,f      ; 256 - (temp0) → temp0
           incf            temp0,f      ;
           incf            temp0,w      ; temp0的值即为预分频器的值
           movwf      lowb            ;
           return
;************************

闸门时间到后关闭对测量信号的计数,分析预分频器内的值.具体是porta,3产生模拟脉冲使预分频器继续计数并使之溢出,计算出闸门关闭时预分频器内的真实值.由此可看出,预分频器虽然不能直接读取,这里采用了间接读取的方法得到其值,这也是这个程序设计中的一个比较巧妙的地方.
离线阿克甘
发帖
247
只看该作者 81楼 发表于: 2009-03-17
楼主不错啊,我也搞单片机了,也用汇编。
下回也也自己做的东西上传一些,给大家用用
离线BG4ABH
发帖
489
只看该作者 82楼 发表于: 2009-03-18
对楼主表示崇高敬意
[quote=淡荣生]; 1.由pic16f84a为核心的35mhz频率计
; 2.lcd显示,4位传输模式,七位数字显示
; 3.闸门时间为0.1秒,精度10hz
; 4.0.1秒内的计数结果在higb、midb、lowb三个单元内
; 5.(higb:midb) × 256 + (lowb)
; 4.编程流程:
;   (1)定义各寄存器,lcd及定时参数设置
;   (2)各寄存器清零,各端口及tmr0的设置
;   (3)lcd初始化
;   (4)设定0.1秒定时,ra3设为输入时开始测量
;   (5)测试当tmr0溢出(higb)+1
;   (6)ra3设为输出时停止测量
;   (7)采集测量到的数据(time)→ higb, (tmr0)→ midb, (预分频器)→ lowb
;   (8)数据处理
;     ①(higb:midb) × 256 + (lowb)
;     ②3单元bin → 4单元压缩bcd
;     ③4单元压缩bcd → 8个非压缩bcd  
;     ④8个非压缩bcd → 8个ascⅡ字符
;   (9)字符送lcd显示
;   (10)go(4)



           movlw      b�'      ;
           movwf      trisa          ; ra3设置为输出,关闭计数闸门,停止测量
           bcf            status,rp0      ;
     
           btfsc            intcon,2      ; 确定最终最高计数器的值
           incf            time,f
           bcf            intcon,2
     
; ---------------------------------------------------------------------------------------------------------------------------------------
; 采集三个单元的计数值 (time) → higb,(tmr0) → midb,(预分频器) → lowb
           movf            tmr0,w
           movwf      midb            ; (tmr0) → midb
           movf            time,w
           movwf      higb            ; (time) → higb
           clrf            temp0            ; 以下分析预分频器内的值

countit      incf            temp0,f            
           bsf            porta,3      ; 产生模拟脉冲使预分频器计数
           bcf            porta,3      ;
           bcf            intcon,2      ; 清溢出标志
           movf            tmr0,w      ;
           bcf            status,z      ;
           subwf      midb,w            ; (midb) - (tmr0) → w
           btfsc            status,z      ; 预分频器溢出则跳
           goto            countit      ;
           incf            temp0,f      ;
           comf            temp0,f      ; 256 - (temp0) → temp0
           incf            temp0,f      ;
           incf            temp0,w      ; temp0的值即为预分频器的值
           movwf      lowb            ;
           return
;************************

闸门时间到后关闭对测量信号的计数,分析预分频器内的值.具体是porta,3产生模拟脉冲使预分频器继续计数并使之溢出,计算出闸门关闭时预分频器内的真实值.由此可看出,预分频器虽然不能直接读取,这里采用了间接读取的方法得到其值,这也是这个程序设计中的一个比较巧妙的地方.[/quote]

向楼主表示崇高敬意!
受益不浅。
咱业余编程,会51.对楼主提供的资料将作深入学习。目标是采用8*2lcd,做寸方大小的频率计。
离线淡荣生
发帖
344
只看该作者 83楼 发表于: 2009-03-18
'
向楼主表示崇高敬意!
受益不浅。
咱业余编程,会51.对楼主提供的资料将作深入学习。目标是采用8*2lcd,做寸方大小的频率计。 [表情]
'
呵呵,过奖了,举手之劳。
离线BG8DPA
发帖
467
只看该作者 84楼 发表于: 2009-03-18
'
向楼主表示崇高敬意!
受益不浅。
咱业余编程,会51.对楼主提供的资料将作深入学习。目标是采用8*2lcd,做寸方大小的频率计。 [表情]
'
支持,手头 正好有802的lcd屏,老兄如果成功了,能把成果发布出来就好了
离线BG6IRO
发帖
1079
只看该作者 85楼 发表于: 2009-03-18
楼主 能代买 mb506 那就更好了
离线淡荣生
发帖
344
只看该作者 86楼 发表于: 2009-03-18
'
楼主 能代买 mb506 那就更好了
'
http://www.gdlixing.com/

拆机的,3元/只。
离线BG6IRO
发帖
1079
只看该作者 87楼 发表于: 2009-03-19
问一下 四个开关啥用???
离线淡荣生
发帖
344
只看该作者 88楼 发表于: 2009-03-19
'
问一下 四个开关啥用???
'
set:设置ee
+:上行键
-:下行键
save:保存设置



编程状态:

按住“set”键,接通电源,lcd显示“eeprom mode1.2”,放开“set”键,lcd接着显示“addr:00 data:0d”则表示频率显示组件已经进入编程状态。
这个状态,是开放了pic16f84单片机的eeprom空间,用00h~0fh共16个地址空间(addr)来存放频率计的相关参数数据(data),以实现各种实用功能。而这些数据决定这频率计的工作状态。
在这个状态下,每按一下“set”键,就可以顺序进入各个地址空间,lcd显示的“addr:”后面的数目会顺序从“00”、“01”、“02”…….开始顺序上跳到“0f”,然后从头又开始。相应的,每变动一个地址(addr),lcd后半部显示的“data:”后的数据也会跟着发生变化,这时可以根据需要用“+”键和“—”键来选定这个地址的数据;变动后,按一下“save”键来保存这个变动的数据。
即:在这个状态下,“set”键负责变换地址(addr),“+”键和“—”用了改变某个地址中的数据(data),而“save”则用于改动数据的保存。
如此检查和改变16个地址(addr)中的数据(data)后,直接关闭电源后,就可以离开这个编程状态了。


地址(addr)      数据(data)含义      出厂默认值      备注
00h      第一个中频值的高位      0dh      f1=
9001.5khz
01h      第一个中频值的中位      bch      
02h      第一个中频值的低位      36h      
03h      第二个中频值的高位      0dh      f2=
8998.5khz
04h      第二个中频值的中位      bbh      
05h      第二个中频值的低位      0ah      
06h      设为“00”时直接显示测量数据
设为非“00”时启用加减f1/f2功能      00h      
07h      频率计内校准参数设定1      15h      
08h      频率计内校准参数设定2      01h      
09h      lcd类型选择
“00”为16x1 lcd,“01”为20x2 lcd
当lcd显示不正确时可调换一下这个数据      01h      
0ah      显示位数选择,“00”为7位,“01”为6位      00h      
0bh      尚未使用            
0ch                  
0dh                  
0eh                  
0fh      设为“01”则恢复出厂默认参数      非“01”



以上内容录自bd7rc/李映超的嵌入式智能频率显示组件使用说明,特此声明.
离线BG6IRO
发帖
1079
只看该作者 89楼 发表于: 2009-03-19
受到   谢谢
离线bg1iwk
发帖
3636
只看该作者 90楼 发表于: 2009-03-19
又一个好的技术贴。。。。。。。。。
离线bd4uaf
发帖
153
只看该作者 91楼 发表于: 2009-03-20
有套件吗?有就要一套。qq:754484056, bd4uaf@163.c0m
离线淡荣生
发帖
344
只看该作者 92楼 发表于: 2009-03-20
'
有套件吗?有就要一套。qq:754484056, bd4uaf@163.c0m
'
下周末发布升级版全部制作资料并提供少量套件.
发布的内容包括两个版本,一个是lcd版,另一个是led版,都是在原版基础上增加一个高量程通道,增加1s闸门等功能,全新改写了程序.
离线BG8DPA
发帖
467
只看该作者 93楼 发表于: 2009-03-20
[quote=淡荣生]下周末发布升级版全部制作资料并提供少量套件.
发布的内容包括两个版本,一个是lcd版,另一个是led版,都是在原版基础上增加一个高量程通道,增加1s闸门等功能,全新改写了程序.[/quote]
支持淡老师发布
离线fatmouse
发帖
15
只看该作者 94楼 发表于: 2009-05-08
记号记号,以备查找
离线BH7OIJ
发帖
51
只看该作者 95楼 发表于: 2009-05-18
楼主精神可嘉,学习的同时也帮助别人进步,赞一个
离线329901929
发帖
221
只看该作者 96楼 发表于: 2009-05-18
非常非常严重地顶楼主一下!下载后改改应该就能用...要是程序有c语言的就完美了!哈哈!
离线dxhdtv
发帖
245
只看该作者 97楼 发表于: 2009-08-24
谢谢楼主的分享!
发帖
689
只看该作者 98楼 发表于: 2009-08-24
套件一定要便宜啊
离线BG6QCB
发帖
5262
只看该作者 99楼 发表于: 2009-08-24