查看: 3021|回复: 39
|
PIC 16f84a
[复制链接]
|
|
我最近写了一个program 可是就是failed to build 可以请教一下小弟吗?
; RAM variable
PORTA EQU 05h
PORTB EQU 06h
TRISA EQU 85h
TRISB EQU 86h
STATUS EQU 03h
; Initialization **************************************
bsf STATUS,RP0 ;GO TO BANK 1.
movlw b'01111' ;A3 IN, A2 IN, A1 IN, A0 IN.
movwf TRISA ;MOVE CURRENT REGISTER TO TRISA .
movlw b '00000' ;SET PORT B ALL OUTPUTS.
movwf TRISB ;MOVE CURRENT REGISTER TO TRISB.
bcf STATUS,RP0 ;SELECT BANK 0.
limit_switch 1
btfss PORTA,0 ;DO A BIT TEST ON PORT A0.
;If it is set to a 1, skip the next instruction.
goto motor_run1 ;If the bit is 1, motor will scroll up.
goto motor_idle1 ;If the bit is 0, motor will remain turned off.
goto sensor
limit_switch 2
btfss PORTA,1 ;DO A BIT TEST ON PORT A1.
;If it is set is 1, skip the next instruction.
goto motor_run2
;If the bit is 1, motor will scroll down.
goto motor_idle2 ;If the bit is 0, motor will remain turned off.
goto sensor
sensor
light_sensor
btfss PORTA,2 ;Do a bit test on PORTA, A2.
goto heat_sensor ;If the bit is 1, will a bit test on heat sensor.
goto sensor ;If the bit is 0, will loop back to sensor.
heat_sensor
btfss PORTA,3 ;Do a bit test on PORTA, A3
goto motor_run1 ;If the bit is 1, motor will scroll up.
goto sensor ;If the bit is 0, will loop back to sensor.
motor_run1
bsf PORTB,0 ;Output 1 to port B0. Turn on motor.
goto limit_switch 1
motor_idle1
bcf PORTB,0 ;Output 0 to port B0. Turn off motor.
goto limit_switch 1
motor_run2
bsf PORTB,1 ;Output 1 to port B1, Turn on motor.
goto limit_switch2
motor_idle2
bcf PORTB,2 ;Output 0 to port B1, Turn off motor.
goto limit_switch2
******End of the program*******
end |
|
|
|
|
|
|
|
楼主 |
发表于 8-2-2012 11:03 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 8-2-2012 11:10 PM
|
显示全部楼层
请问各位大哥,小弟有个问题,就是在这个programming 里,我需要到temperature sensor, 然而我知道temperature sensor 是analog output, 我的pic 是没有internal a/d converter。
我的问题是,我如果加了一个a/d converter 我的programming 要怎样改?我要如何去set 我的temperature sensor 在certain temperature 的时候它可以给signal? 我的programming 要怎样写?我google 找了很久,大多数都是他们display on lcd only,有的也是其他的programming language,希望你们能帮助我。
问题1:a/d converter 需不需要写programming
问题2:temperature sensor 要怎样programming |
|
|
|
|
|
|
|
楼主 |
发表于 8-2-2012 11:10 PM
|
显示全部楼层
请问各位大哥,小弟有个问题,就是在这个programming 里,我需要到temperature sensor, 然而我知道temperature sensor 是analog output, 我的pic 是没有internal a/d converter。
我的问题是,我如果加了一个a/d converter 我的programming 要怎样改?我要如何去set 我的temperature sensor 在certain temperature 的时候它可以给signal? 我的programming 要怎样写?我google 找了很久,大多数都是他们display on lcd only,有的也是其他的programming language,希望你们能帮助我。
问题1:a/d converter 需不需要写programming
问题2:temperature sensor 要怎样programming |
|
|
|
|
|
|
|
楼主 |
发表于 9-2-2012 12:22 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 9-2-2012 12:25 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 9-2-2012 01:10 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 9-2-2012 02:08 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 9-2-2012 03:01 PM
|
显示全部楼层
你知道没人回复你的原因吗?
1. 你要想做什么? 你的应用是什么?
2. 你想要拿到什么效果
3. 你做 ...
闪灵乐 发表于 9-2-2012 01:10 PM
你知道没人回复你的原因吗?
1. 你要想做什么? 你的应用是什么?
2. 你想要拿到什么效果
3. 你做 ...
闪灵乐 发表于 9-2-2012 01:10 PM
1. 你要想做什么? 你的应用是什么?
答:我想放temperature sensor 进入我的pic 里面,我用着pic16f84a 我知道这个pic是没有ADC的,所以要加入 external ADC,为什么要放adc呢,是因为我需要到temperature sensor,temperature sensor 是analog output,然而我需要到digital output。
2. 你想要拿到什么效果
答:我想写一个programming 当temperature 到一定的温度时,她会send ”1“ 去我的pic,如果不是的话就”0“。比如说,我的temperature 到 40 至 50 度 时,她会send signal 给pic,然后会trigger 我的dc motor。不然的话就idle。
3. 你做了什么?
答:我的草稿的programming已经写好了,可是我就是想不到如何放一个external 的 adc,然后,这一个adc 需不需要再program。
4. 你遇到了什么问题。
答:我不懂如何写adc的programming,还有是说我不懂如何set 我的temperature sensor 到一定的温度时,会send signal 给pic。我是用asm写的
5. 有电路图吗?
电路图还没有
6. 有照片/图片补充吗?
7. 你住的地区在哪里? 如要买东西可能同区域的朋友能给予建议。
8. 你google 了吗?如有,搜索关键字是什么?
答: 我Google了,ADC interface with temperature sensor,可是大多数是叫我们如何display temperature在lcd 上面。还有是大多数都是c language,我需要的是asm
希望我这次给了正确的问题,在请各位帮忙。万分感激 |
|
|
|
|
|
|
|
发表于 9-2-2012 04:37 PM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 10-2-2012 11:49 AM
|
显示全部楼层
抱歉~~ 大家都知道我不会ASM 的。
如果没有ADC, 可以用Comparator 如LM339 之类的。
当温度到了, 输 ...
pic 发表于 9-2-2012 04:37 PM
那么如果是c language,版主能帮忙吗?我会试一下从c language 着手。 |
|
|
|
|
|
|
|
发表于 10-2-2012 02:32 PM
|
显示全部楼层
那么如果是c language,版主能帮忙吗?我会试一下从c language 着手。
gozli_andrew88 发表于 10-2-2012 11:49 AM
8# 楼
LM35 那个是ADC 的范例。 |
|
|
|
|
|
|
|
楼主 |
发表于 11-2-2012 01:47 AM
|
显示全部楼层
PIC 我想问下LM399 的功能
比如说,如果我要的温度是》25degC, 那LM35的输出是 25x 10mV=250mV=0.25V
那么在LM399的Vref,我放0.25v,是不是就会拿到我的output “1”? 有错吗?希望妳可改正我 |
|
|
|
|
|
|
|
发表于 11-2-2012 10:58 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 11-2-2012 11:09 AM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 11-2-2012 11:21 AM
|
显示全部楼层
|
|
|
|
|
|
|
楼主 |
发表于 11-2-2012 06:25 PM
|
显示全部楼层
本帖最后由 gozli_andrew88 于 11-2-2012 06:30 PM 编辑
如学C 写你上面的功能, 包你一天就学会了。
哦。。对不起~
那么, 你告诉我准确的流程和要的功能 ...
pic 发表于 11-2-2012 11:21 AM
不要说到赔罪那么大件事啦。我只是在学习当中,我的project 是酱走的。里面的component 包括两个limit switch, 两个dc motor, 一个light sensor, 一个temperature sensor。
|
|
|
|
|
|
|
|
发表于 11-2-2012 11:34 PM
|
显示全部楼层
里面的component 包括两个limit switch, 两个dc motor, 一个light sensor, 一个temperature sensor。
gozli_andrew88 发表于 11-2-2012 06:25 PM
两个马达?
你的条件不足啊。。 很模糊啊~我帮不了你的, 直到搞清楚
你说limit SW 1= 1 , motor x 下卷,那几时停呢? 又是哪个motor 呢?
如果按你写的, motor 会很像打兵乓, 上上下下 没完没了。。。 |
|
|
|
|
|
|
|
楼主 |
发表于 11-2-2012 11:44 PM
|
显示全部楼层
本帖最后由 gozli_andrew88 于 11-2-2012 11:45 PM 编辑
两个马达?
你的条件不足啊。。 很模糊啊~我帮不了你的, 直到搞清楚
你说limit SW 1= 1 , motor x 下 ...
pic 发表于 11-2-2012 11:34 PM
erm.... 可能我解释的不清楚,我的意思是当motor scroll down的时候,我的curtain 触碰到limit sw2 的时候,dc motor 2 就会idle 了。我用两个dc motor 是因为一个让它 卷上,一个卷下,当motor 卷上的时候,碰到limit sw1 ,dc motor 1 就会停止了。抱歉解释的不够清楚... |
|
|
|
|
|
|
|
发表于 12-2-2012 10:37 AM
|
显示全部楼层
erm.... 可能我解释的不清楚,我的意思是当motor scroll down的时候,我的curtain 触碰到limit sw ...
gozli_andrew88 发表于 11-2-2012 11:44 PM
还是很模糊, 你的机械结构是怎样也不知道, 两个motor? 独立操作? 如果一个motor 要上。 一个motor 要下, 两个 拔河?Limit 是配对的? 当你没有办法让人明白过程, 程序是写不出来, 矛盾重重~~
下面是乱乱写的, 按你的描述, 我的理解写的。
你参考就好。。
编译器是 CCS C。- // gozli_andrew88
- // pseudocode
- // 12 Feb 2012
- // By pic@cari
- #include <16F84A.H>
- #fuses XT,NoPROTECT,NoWDT
- #use delay(clock=4000000)
- #byte PortA = 0x05
- #byte PortB = 0x06
- #bit iLimitSw1 = PortA.0
- #bit iLimitSw2 = PortA.1
- #bit iSensor_Light = PortA.2
- #bit iSensor_Heat = PortA.3
- #bit oMotor_SclUp = PortB.0
- #bit oMotor_SclDw = PortB.1
- //我的意思是当motor scroll down的时候,
- //我的curtain 触碰到limit sw2 的时候,dc motor 2 就会idle 了。
- //我用两个dc motor 是因为一个让它 卷上,一个卷下,
- //当motor 卷上的时候,碰到limit sw1 ,dc motor 1 就会停止了。
- Void MotorScrollDown()
- {
- oMotor_SclDw=1;// turn on Scroll down motor
- while(iLimitSw2==0)
- {
- // When LimitSw2 not 1, on motor Scroll down
- // Here we wait until Limit Sw2 =1
- }
- oMotor_SclDw=0;// turn off Scroll down motor
- }
- Void MotorScrollUp()
- {
- oMotor_SclUp=1;// turn on Scroll Up motor
- while(iLimitSw1==0)
- {
- // When LimitSw1 not 1, on motor Scroll Up
- // Here we wait until Limit Sw1 =1
- }
- oMotor_SclUp=0;// turn off Scroll Up motor
- }
- void main()
- {
- set_tris_A(0b11111111);
- set_tris_B(0b00000000);
- //////////////////////////
- // Init
- if (iLimitSw1==1) // If Limit Switch =1
- {
- MotorScrollDown();
- }
- if (iLimitSw2==1) // if Limit Switch =2
- {
- MotorScrollUp();
- }
- //////////////////////////
- while (1)
- {
- if(iSensor_Light==1 && iSensor_Heat==1 && iLimitSw1==0)
- {
- // 当Light =1,Temp=1, LimitSw =0
- MotorScrollUp();
- }
- // 什么时候scrioll Down? 因为你没有讲,就自己写吧~
- }
- }
复制代码 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|