查看: 1916|回复: 20
|
PIC16F877A 的 project.
[复制链接]
|
|
我自己试了很久,但还是不成功,希望有人可以帮帮我, 先说声谢谢。
大致的概念是这样的。。
我用 PORT E 和 PORT C 来接收来自键盘的INPUT,PORT B 和 PORT D 来TEST CHIP。
然后PORT D 来控制LED.
我的一部分CODE 是这样的。。
processor 16F877A
include <p16f877A.inc>
;..........................NO INITAL THE CHIP FUNCTION......................................
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF
;...........................INITIAL LCD & keypad (PORT A,C,E)...............................
ORG 0
BCF STATUS,RP0
BCF STATUS,RP1
CLRF PORTA
BSF STATUS,RP0 ; TO SET PORTA AS DIGITAL INPUT
MOVLW 0x06
MOVWF ADCON1
BCF STATUS,RP0
movlw B'11111111'
tris PORTC
movlw B'000000'
tris PORTA
movlw B'111'
movwf TRISE
;......................................get input from keypad.......................
scan0 btfss PORTC, 0
goto lp0
goto scan1
scan1 btfss PORTC, 1
goto lp1
goto scan2
scan2 btfss PORTC, 2
goto lp2
goto scan3
scan3 btfss PORTC, 3
goto lp3
goto scan4
scan4 btfss PORTC, 4
goto lp4
goto scan5
scan5 btfss PORTC, 5
goto lp5
goto scan6
scan6 btfss PORTE, 0
goto lp6
goto scan7
scan7 btfss PORTE, 1
goto lp7
goto scan8
scan8 btfss PORTE, 2
goto lp8
goto scan9
scan9 btfss PORTC, 6
goto lp9
goto scan0
;....................................goto chip test loop.............................
;...........................................chip0...................................
lp0 bsf PORTA, 0
btfss PORTC, 7
goto chip0
goto lp0
;...........................................chip1....................................
lp1 bsf PORTA, 0
btfss PORTC, 7
goto wrong
goto lp1
;..........................................chip2......................................
lp2 bsf PORTA, 0
btfss PORTC, 7
goto well
goto lp2
;..........................................chip3...................................
lp3 bsf PORTA, 0
btfss PORTC, 7
goto wrong
goto lp3
;..........................................chip4..............................
lp4 bsf PORTA, 0
btfss PORTC, 7
goto well
goto lp4
;.........................................chip5.......................................
lp5 bsf PORTA, 0
btfss PORTC, 7
goto wrong
goto lp5
;.............................................chip6.....................................
lp6 bsf PORTA, 0
btfss PORTC, 7
goto wrong
goto lp6
;...............................................chip7.........................
lp7 bsf PORTA, 0
btfss PORTC, 7
goto well
goto lp7
;..............................................chip8.............................
lp8 bsf PORTA, 0
btfss PORTC, 7
goto well
goto lp8
;...........................................chip9..............................
lp9 bsf PORTA, 0
btfss PORTC, 7
goto wrong
goto lp9
;...................................test loop ....................................................
chip0 movlw B'00010010'
movwf TRISB
movlw B'00100100'
movwf TRISD
ls000 Bsf PORTD, 0
Bsf PORTD, 1
Bsf PORTD, 3
Bsf PORTD, 4
Bsf PORTB, 2
Bsf PORTA, 3
Bsf PORTB, 5
Bsf PORTB, 6
Bsf PORTB, 7
Bcf PORTD, 6
btfsc PORTB, 1
goto damage
btfsc PORTB, 4
goto damage
btfsc PORTD, 2
goto damage
btfsc PORTD, 5
goto damage
Bsf PORTD, 0
Bsf PORTD, 3
Bsf PORTB, 2
Bsf PORTB, 5
Bcf PORTD, 1
Bcf PORTD, 4
Bcf PORTB, 3
Bcf PORTB, 6
btfss PORTB, 1
goto damage
btfss PORTB, 4
goto damage
btfss PORTD, 2
goto damage
btfss PORTD, 5
goto damage
Bcf PORTD, 0
Bcf PORTD, 3
Bcf PORTB, 2
Bcf PORTB, 5
Bsf PORTD, 1
Bsf PORTD, 4
Bsf PORTB, 3
Bsf PORTB, 6
btfss PORTB, 1
goto damage
btfss PORTB, 4
goto damage
btfss PORTD, 2
goto damage
btfss PORTD, 5
goto damage
goto well
;...................................well or wrong..........................................
well bsf PORTA, 1
bcf PORTA, 2
bcf PORTA, 3
bcf PORTA, 4
goto done
wrong bsf PORTA, 2
bcf PORTA, 1
bcf PORTA, 3
bcf PORTA, 4
goto done
damage bsf PORTA, 2
bcf PORTA, 1
bcf PORTA, 3
bcf PORTA, 4
goto done
wait bsf PORTA, 4
bcf PORTA, 2
bcf PORTA, 3
bcf PORTA, 1
goto done
done bsf PORTA, 5
goto done
END
[ 本帖最后由 nikel 于 7-3-2007 09:20 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 11-3-2007 08:04 AM
|
显示全部楼层
原帖由 nikel 于 7-3-2007 05:17 PM 发表
我自己试了很久,但还是不成功,希望有人可以帮帮我, 先说声谢谢。
你试了什么?是什么不成功呢?你的应用是什么? |
|
|
|
|
|
|
|
楼主 |
发表于 11-3-2007 10:26 AM
|
显示全部楼层
原帖由 pic 于 11-3-2007 08:04 AM 发表
你试了什么?是什么不成功呢?你的应用是什么?
可以说我也不知到为什么不成功,我是用PICstart plus 的,
很多时候PIC都不能正确的 Load Sequence.
我觉得是 CONFIGURE 不对,
但我又不知道哪里不对。。
我还只是 PIC 的初学者。 |
|
|
|
|
|
|
|
发表于 11-3-2007 12:08 PM
|
显示全部楼层
原帖由 nikel 于 11-3-2007 10:26 AM 发表
可以说我也不知到为什么不成功,我是用PICstart plus 的,
很多时候PIC都不能正确的 Load Sequence.
我觉得是 CONFIGURE 不对,
但我又不知道哪里不对。。
我还只是 PIC 的初学者。
你是写coding有问题, 还是PIC烧录有问题?
你的电路有LCD, Keypad 和不懂是什么的ChipSlot。
什么都不管先,一样一样来。。。
首先你的LCD可以操作吗?可以了再做Keypad 的部分。。等等。。。
还有, 你还没说你要做的是什么? 你的应用是什么?就是说最后你要拿到什么效果/结果?
LCD的部分,可以参考旧帖, 有电路,有C源码。 |
|
|
|
|
|
|
|
楼主 |
发表于 11-3-2007 12:31 PM
|
显示全部楼层
原帖由 pic 于 11-3-2007 12:08 PM 发表
你是写coding有问题, 还是PIC烧录有问题?
你的电路有LCD, Keypad 和不懂是什么的ChipSlot。
什么都不管先,一样一样来。。。
首先你的LCD可以操作吗?可以了再做Keypad 的部分。。等等。。。
...
C源码, 我没学过,如果现在才学时间上有些紧闭。
我的 KEYPAD 以经可以用了。。
LCD 还不行。。
我要做的是 IC TESTER, 也就是说,当我把 IC 放进 IC SLOT时,
再输入IC 的 PART NUMBER, 然后 PIC 、就会输出和接收 IC 传回来的资料比对。
然后判定那 IC 有没有坏。
还可不可以用。
严格来说我觉得是CODING 有问题,PIC烧录应该没事,都能烧录。 |
|
|
|
|
|
|
|
发表于 11-3-2007 12:43 PM
|
显示全部楼层
原帖由 nikel 于 11-3-2007 12:31 PM 发表
C源码, 我没学过,如果现在才学时间上有些紧闭。
我的 KEYPAD 以经可以用了。。
LCD 还不行。。
我要做的是 IC TESTER, 也就是说,当我把 IC 放进 IC SLOT时,
再输入IC 的 PART NUMBER, 然后 PIC ...
那你现在的问题是什么?是LCD的部分?
如是其他的coding 问题,你有用MPLAB debug吗? |
|
|
|
|
|
|
|
楼主 |
发表于 11-3-2007 12:50 PM
|
显示全部楼层
原帖由 pic 于 11-3-2007 12:43 PM 发表
那你现在的问题是什么?是LCD的部分?
如是其他的coding 问题,你有用MPLAB debug吗?
我有用MPLAB debug。 没问题。。
LCD 也有问题,但是不知到为什么,
PORTD 不能够用。。
老实说,我不知道为什么越做越乱了。。
在加上哦朋友帮忙买的 LCD 找不到 DATA SHEET..
所以现在没用 LCD,先用 LED 来做。
[ 本帖最后由 nikel 于 11-3-2007 12:52 PM 编辑 ] |
|
|
|
|
|
|
|
发表于 11-3-2007 01:03 PM
|
显示全部楼层
回复 #7 nikel 的帖子
LCD是去PortD?你的电路是#1楼那个? 还是改了? |
|
|
|
|
|
|
|
楼主 |
发表于 11-3-2007 01:06 PM
|
显示全部楼层
原帖由 pic 于 11-3-2007 01:03 PM 发表
LCD是去PortD?你的电路是#1楼那个? 还是改了?
LCD 是去PORT A 的。。
楼上那个电路图是对的。。
如果可以的话,请帮忙看看那 Program 有没有问题,
电路图应该是没有问题的了。。 |
|
|
|
|
|
|
|
发表于 11-3-2007 01:40 PM
|
显示全部楼层
原帖由 nikel 于 11-3-2007 01:06 PM 发表
LCD 是去PORT A 的。。
楼上那个电路图是对的。。
如果可以的话,请帮忙看看那 Program 有没有问题,
电路图应该是没有问题的了。。
你的Program都没有LCD的Coding。
你的LCD怎样接去PortA?请放电路。(6条线,勉强可以,但要注意A4是open drain) |
|
|
|
|
|
|
|
楼主 |
发表于 11-3-2007 02:32 PM
|
显示全部楼层
原帖由 pic 于 11-3-2007 01:40 PM 发表
你的Program都没有LCD的Coding。
你的LCD怎样接去PortA?请放电路。(6条线,勉强可以,但要注意A4是open drain)
什么是 open drain??
这是我第一次用 PIC16f877a 以前是都用 pic16f84a 的。
那 RA4 要怎么用,如果我用 RA4 当成input 会比较好吗??
我可以把 KEYPAD 用的 PIN 和 RA4 掉换。。 |
|
|
|
|
|
|
|
发表于 11-3-2007 05:45 PM
|
显示全部楼层
原帖由 nikel 于 11-3-2007 02:32 PM 发表
什么是 open drain??
这是我第一次用 PIC16f877a 以前是都用 pic16f84a 的。
那 RA4 要怎么用,如果我用 RA4 当成input ...
Open Drain 就像Transistor 的Open Collector 那样。
做I/O的话, 它需要pull high resistor,不然A4只会Low, 不会变High。 |
|
|
|
|
|
|
|
楼主 |
发表于 11-3-2007 07:05 PM
|
显示全部楼层
原帖由 pic 于 11-3-2007 05:45 PM 发表
Open Drain 就像Transistor 的Open Collector 那样。
做I/O的话, 它需要pull high resistor,不然A4只会Low, 不会变High。
那还有哪一个 PIN 是 Open Drain 的??
那没关系。我把 RA4 换成input port.(key pad) 我有放pull high resistor 的。。 |
|
|
|
|
|
|
|
发表于 12-3-2007 12:28 AM
|
显示全部楼层
回复 #13 nikel 的帖子
没有了。RA4是一个“catch-cha”(陷阱),很多初学者都会重招的,包括我,如你不知道的话,做到你“孝”!
你就加上拉电阻(Pull high resistor)在RA4好了。 |
|
|
|
|
|
|
|
楼主 |
发表于 19-3-2007 10:47 AM
|
显示全部楼层
请问 bit test 可不可以一次过 test 三或四个pin..
象这样。
btfsc PORTA, 1, 2, 3 ,4
call XXXX
call YYY |
|
|
|
|
|
|
|
发表于 21-3-2007 09:31 AM
|
显示全部楼层
我建议当你开始用你的PIC 时, 你应该写一个简单的Program 来test 你的所有的PORT (用LED来test)。
就是说要make sure 你每一个port 都能用。 就像 RA4 一样。 还有一个是 pin36 (RB3)也是不能用的 (要去改 LVP bits inside the Configuration word(2007h)
不要一开始就写program. 不同的PIC 有不同的 initialise code. 就像 PIC16F877, PORTA可以是 Analog 或 Digital。 (从你的code里, 你已经把它换成digital了。)
还有, 我想问你是不是在做 Diploma Final YearProject? IICP student???
如果是, 那我就是你的senior!
哈哈!! |
|
|
|
|
|
|
|
楼主 |
发表于 22-3-2007 12:21 AM
|
显示全部楼层
原帖由 kevin_obl 于 21-3-2007 09:31 AM 发表
我建议当你开始用你的PIC 时, 你应该写一个简单的Program 来test 你的所有的PORT (用LED来test)。
就是说要make sure 你每一个port 都能用。 就像 RA4 ...
RB3 是不是 把 LVP set 去 off 就能用了, 至于RA0-RA3 我换去 digital 了还是不用来get input.
IICP 是什么学校, 对这是我的Final Year Project不过是degree 的。
因为我是这大学的第一批电脑工程系的学生,教授都不知道要教什么,有些甚至不会教,
我们可以说都是自己学的。。
忘了说, 我是沙巴大学电脑工程系的学生。 |
|
|
|
|
|
|
|
发表于 22-3-2007 07:39 AM
|
显示全部楼层
回复 #17 nikel 的帖子
建议你还是用CCS C吧。。。可以缩短开发时间。。。
不会可以学。。。 |
|
|
|
|
|
|
|
楼主 |
发表于 22-3-2007 10:12 AM
|
显示全部楼层
原帖由 pic 于 22-3-2007 07:39 AM 发表
建议你还是用CCS C吧。。。可以缩短开发时间。。。
不会可以学。。。
你是说用 C 来写coding 吗??
当初教授教时根本没提到可以用 C 来写。
到做要开始写的时候已经迟了。。
忙完这一次的 PROJECT 后会试着自己学。。 |
|
|
|
|
|
|
|
发表于 22-3-2007 10:40 AM
|
显示全部楼层
回复 #19 nikel 的帖子
不会迟的,C 很容易上手。像你上面的,我在半小时就可以用C code完成Keypad,LCD 的部分。
你出社会工作,只会ASM的话,我还不请你呢。。。
就好像你只会笔算,不会利用计算机。。。
当初教授教时根本没提到可以用 C 来写,是要你打好基础而已。。。(或教授也不会C ) |
|
|
|
|
|
|
| |
本周最热论坛帖子
|