• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (tina)




Re: 簡單的開關問題
#21
中級會員
中級會員


我的開關只是很間單的彈跳開關
用來控制LED
那請問一下 PORTA,4 與 5 有什麼不同
那在程式裡要如何定義呢
謝謝

發表於: 2005/11/11 12:53
頂部


Re: 簡單的開關問題
#22
中級會員
中級會員


謝謝
我的PORTA第四隻已經接一個開關
我只是想在第五隻腳接再接一開關
我照著第四隻的接法 但是並不會動作
我在想到底是什麼問題


發表於: 2005/11/11 11:45
頂部


簡單的開關問題
#23
中級會員
中級會員


大家好 我想請問一個簡單的開關問題
我想在PORTA多加上一個開關 我知道要串聯一個電阻與電容
但是我在程式的部分 不知道要如何定義
我使用PIC 16F873A 燒錄器為ICD 2
THX

發表於: 2005/11/11 9:24
頂部


Re: 請問震盪器...
#24
中級會員
中級會員


不好意思
那我再請問一個問題 那我在燒錄時 oscillator模式要選擇RC的嗎? 因為我在DEMOBOARD測試時是選擇HS的模式 謝謝

發表於: 2005/10/31 20:57
頂部


請問震盪器...
#25
中級會員
中級會員


大家好
我想請問一下 我使用16F873A 我只想單純控制LED
我的頻率想設為4MHz 那我是不是只要在OSC1 與OSC2
接上4MHz的震盪器與電容就好 其他不用考慮呢
謝謝各位

發表於: 2005/10/31 17:59
頂部


還是同一個問題....
#26
中級會員
中級會員


大家好 我還是同一個問題 中斷督跳不進去 我已經打開GIE PEIE 與 TMRIE 當我打開TMR10N還是跳不進去中斷 我已經改好多次 不知道哪裡出錯 請各位幫幫忙 謝謝
PIC 16873A

list p=16F873a        
#include     <p16f873a.inc>            ; Include file locate at defult directory

w_temp        equ    0x20                ;定義暫存器位址w_temp,STATUS_temp,
STATUS_temp    equ    0x21
PCLATH_temp    equ    0x22
Reg_count_1s    equ    0x23
TMPH    equ    0x24
TMPL    equ    0x25
#define    Numcount1s    .3    

;********************************************
             
;*********************************************
        
org        0x00                ;初始位置為0x00
        nop    
;利用ICD偵錯時,程式第一個位址需填入nop
        
goto    Main                            org    0x04    ;中斷位置
IntServ
        movwf   w_temp
;將w暫存器內容儲存
        movf    STATUS
,w
        clrf    STATUS
        movwf    STATUS_temp
        movf    PCLATH
,w
        movwf    PCLATH_temp
        clrf    PCLATH
        movf    TMR1H
,w
        movwf    TMPH
        movf    TMR1L
,w
        movwf    TMPL
        movf    TMR1H
,w
        banksel    PIR1
        btfss    PIR1
,TMR1IF
        
goto    overflow_detect        ;判斷Timer1是否中斷
        decfsz    Reg_count_1s
        
goto    $-1

        call    END_INT    
;當Timer1有溢位中斷產生,呼叫中斷服務程式
        clrf    TMR1L    
;把Timer1L清為零,防止進位
        movlw    0x3C                movwf    TMR1H                movlw    0xB0                movwf    TMR1L
        retfie
                    
END_INT
        banksel    PIR1                
;選擇PIR1放置的Bank
        bcf    PIR1
,TMR1IF            ;將Timer1的致能旗標清除
        bcf        T1CON
,TMR1ON
        movf    PCLATH_temp
,w
        movwf    PCLATH
        movf    STATUS_temp
,w
        movwf    STATUS
        movf    w_temp
        clrf    PORTB
        
return
    
                ;----------------------
main----------------------------------------------------------
Main
         call    initial
        
wait        
        movlw    
b'00001111'
        
movwf    PORTB

;-------------------------------------------------------------------------------------
initial
        
        banksel    TRISB
        clrf    TRISB
        banksel    PORTB
        movlw    
b'00001111'            movwf    PORTB
                                banksel    T1CON
        clrf    T1CON                
;設定Timer1時脈為Fosc/4
        
        clrf    TMR1H                
;將Timer1內容清為零
        clrf    TMR1L
        banksel    INTCON
        clrf    INTCON                
;將INTCON內容清為零
        bsf        INTCON
,PEIE            ;將周邊功能的中斷致能
        bsf        INTCON
,GIE
        banksel    PIE1
        clrf    PIE1                
;將PIE1內容清為零
        bsf    PIE1
,TMR1IE            ;將Timer1溢位中斷致能
        banksel    PIR1
        clrf    PIR1
        banksel    TMR1L
        clrf    TMR1L
        movlw    0x3C
        movwf    TMR1H
        movlw    0xB0
        movwf    TMR1L

        movlw    Numcount1s
        movwf    Reg_count_1s
        banksel    T1CON
        bsf        T1CON
,TMR1ON        ;讓Timer1開始計數
        
        
return

發表於: 2005/10/2 22:00
頂部


請教中斷問題.....
#27
中級會員
中級會員


大家好 這是我寫的一個中斷程式 問題出在我使用單步執行
程式並不會跑到中斷向量的位址 請各位幫幫忙 我在想是不是我的中斷旗標沒設定好 以下是我PIC 與TIMER1得初始值設定
當打開 bsf T1CON,TMR1ON 程式不是應該會跑到0x004的位址 但是我的程式只會回到當初呼叫Timer1的位址 請各位幫幫忙 謝謝

initial
banksel TRISB
clrf TRISB ;定義PORTB為輸出阜
clrf TMR1H ;將Timer1內容清為零
clrf TMR1L
clrf INTCON ;將INTCON內容清為零
bcf INTCON,PEIE ;將周邊功能的中斷致能
bcf INTCON,GIE
banksel TMR1L
clrf TMR1L
movlw 0x3C
movwf TMR1H
movlw 0xB0
movwf TMR1L
return
;-------------------------------------------------------------------------------------------------
Timer1
banksel T1CON
clrf T1CON ;設定Timer1時脈為Fosc/4
bsf INTCON,GIE
bsf INTCON,PEIE
banksel PIR1 ;選擇PIR1放置的Bank
bcf PIR1,TMR1IF;將Timer1的致能旗標清除
banksel PIE1
clrf PIE1 ;將PIE1內容清為零
bsf PIE1,TMR1IE ;將Timer1溢位中斷致能

movlw Numcount1s
movwf Reg_count_1s
movlw Num1mCount
movwf Reg_count_1m
clrf TMR1L;把Timer1L清為零,防止進位
movlw 0x3C movwf TMR1H movlw 0xB0 movwf TMR1L
bsf T1CON,TMR1ON
return

發表於: 2005/9/26 17:56
頂部


請教各位...
#28
中級會員
中級會員


大家好 這是一個簡單的程式 我想要利用按鍵的按下
LED便會往左移一位 每按一下 往左移一位 但是我的程式不會RUN 請各位高手指點 感激不盡
我使用PIC 16F873A ICD 2 Demoboard PICDEM 2 PLUS

list p=16F873a
#include <p16f873a.inc> ; Include file locate at defult directory

;
#define Shift_value b'0001'

shift_value equ 0x20
;********************************************

;*********************************************
org 0x00
nop
initial:
banksel ADCON1 ;定義ADCCON1,將PORTA第四個bit設為數位模式
movlw b'11001110'
movwf ADCON1
banksel CMCON ;定義CMCON將比較器功能關閉
movlw b'00000111'
movwf CMCON

banksel TRISB ;定義TRISB設定PORTB為輸出模式
clrf TRISB

banksel PORTB
clrf PORTB



;***********************************************
Main
;***********************************************
start:
;movlw b'00000000' ;LED初始狀態
;movwf PORTB
movlw Shift_value
movwf PORTB

switch:
btfsc PORTA,4 ;判斷RA4是否按下
goto switch ;沒有-->switch繼續偵測;有-->執行下一行
goto original

;-----------------------LED狀態---------------------------------
original:
rlf PORTB
goto switch
;-----------------------------------------------------------------------

end

發表於: 2005/8/23 16:09
頂部


請問一下...LCD的問題
#29
中級會員
中級會員


大家好 請問一下
PICDEM_2_PLUS Demoboard 的 LCD需不需要驅動程式
我使用PIC 16F873A 我參照光碟理的範例 但是還是出不來
可否指點一下 謝謝 以下是我的程式碼
list p=16F873a
#include P16F873a.inc


#define LCD_D4 PORTB, 0 ; LCD data bits
#define LCD_D5 PORTB, 1
#define LCD_D6 PORTB, 2
#define LCD_D7 PORTB, 3

#define LCD_D4_DIR TRISB, 0 ; LCD data bits
#define LCD_D5_DIR TRISB, 1
#define LCD_D6_DIR TRISB, 2
#define LCD_D7_DIR TRISB, 3

#define LCD_E PORTA, 1 ; LCD E clock
#define LCD_RW PORTA, 2 ; LCD read/write line
#define LCD_RS PORTA, 3 ; LCD register select line

#define LCD_E_DIR TRISA, 1
#define LCD_RW_DIR TRISA, 2
#define LCD_RS_DIR TRISA, 3

#define LCD_INS 0
#define LCD_DATA 1

D_LCD_DATA UDATA 0x10
COUNTER res 1
delay res 1
temp_wr res 1
temp_rd res 1

GLOBAL temp_wr

PROG1 CODE


;***************************************************************************

LCDLine_1
banksel temp_wr
movlw 0x80
movwf temp_wr
call i_write
return
GLOBAL LCDLine_1

LCDLine_2
banksel temp_wr
movlw 0xC0
movwf temp_wr
call i_write
return
GLOBAL LCDLine_2

d_write ;write data
call LCDBusy
bsf STATUS, C
call LCDWrite
banksel TXREG ;move data into TXREG
movwf TXREG
banksel TXSTA
btfss TXSTA,TRMT ;wait for data TX
goto $-1
banksel PORTA
return
GLOBAL d_write

i_write ;write instruction
call LCDBusy
bcf STATUS, C
call LCDWrite
return
GLOBAL i_write

rlcd macro MYREGISTER
IF MYREGISTER == 1
bsf STATUS, C
call LCDRead
ELSE
bcf STATUS, C
call LCDRead
ENDIF
endm
;****************************************************************************




; *******************************************************************
LCDInit
clrf PORTA

banksel TRISA ;configure control lines
bcf LCD_E_DIR
bcf LCD_RW_DIR
bcf LCD_RS_DIR

movlw b'00001110'
banksel ADCON1
movwf ADCON1

movlw 0xff ; Wait ~15ms @ 20 MHz
banksel COUNTER
movwf COUNTER
movlw 0xFF
banksel delay
movwf delay
call DelayXCycles
decfsz COUNTER, F
goto $-3

movlw b'00110000' ;#1 Send control sequence
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble

movlw 0xff ;Wait ~4ms @ 20 MHz
movwf COUNTER
movlw 0xFF
movwf delay
call DelayXCycles
decfsz COUNTER, F
goto $-3

movlw b'00110000' ;#2 Send control sequence
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble

movlw 0xFF ;Wait ~100us @ 20 MHz
movwf delay
call DelayXCycles

movlw b'0011000' ;#3 Send control sequence
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble

;test delay
movlw 0xFF ;Wait ~100us @ 20 MHz
movwf delay
call DelayXCycles


movlw b'00100000' ;#4 set 4-bit
movwf temp_wr
bcf STATUS,C
call LCDWriteNibble

call LCDBusy ;Busy?

movlw b'00101000' ;#5 Function set
movwf temp_wr
call i_write

movlw b'00001101' ;#6 Display = ON
movwf temp_wr
call i_write

movlw b'00000001' ;#7 Display Clear
movwf temp_wr
call i_write

movlw b'00000110' ;#8 Entry Mode
movwf temp_wr
call i_write

movlw b'10000000' ;DDRAM addresss 0000
movwf temp_wr
call i_write

movlw b'00000010' ;return home
movwf temp_wr
call i_write


return

GLOBAL LCDInit
; *******************************************************************








;****************************************************************************
; _ ______________________________
; RS _>--<______________________________
; _____
; RW \_____________________________
; __________________
; E ____________/ \___
; _____________ ______
; DB _____________>--------------<______
;
LCDWriteNibble
btfss STATUS, C ; Set the register select
bcf LCD_RS
btfsc STATUS, C
bsf LCD_RS

bcf LCD_RW ; Set write mode

banksel TRISB
bcf LCD_D4_DIR ; Set data bits to outputs
bcf LCD_D5_DIR
bcf LCD_D6_DIR
bcf LCD_D7_DIR

NOP ; Small delay
NOP

banksel PORTA
bsf LCD_E ; Setup to clock data

btfss temp_wr, 7 ; Set high nibble
bcf LCD_D7
btfsc temp_wr, 7
bsf LCD_D7
btfss temp_wr, 6
bcf LCD_D6
btfsc temp_wr, 6
bsf LCD_D6
btfss temp_wr, 5
bcf LCD_D5
btfsc temp_wr, 5
bsf LCD_D5
btfss temp_wr, 4
bcf LCD_D4
btfsc temp_wr, 4
bsf LCD_D4

NOP
NOP

bcf LCD_E ; Send the data

return
; *******************************************************************





; *******************************************************************
LCDWrite
call LCDBusy
call LCDWriteNibble
BANKSEL temp_wr
swapf temp_wr, f
call LCDWriteNibble
banksel temp_wr
swapf temp_wr,f

return

GLOBAL LCDWrite
; *******************************************************************





; *******************************************************************
; _____ _____________________________________________________
; RS _____>--<_____________________________________________________
; ____________________________________________________
; RW _________/
; ____________________ ____________________
; E ____________/ \____/ \__
; _________________ __________ ___
; DB _________________>--------------<__________>--------------<___
;
LCDRead
banksel TRISB
bsf LCD_D4_DIR ; Set data bits to inputs
bsf LCD_D5_DIR
bsf LCD_D6_DIR
bsf LCD_D7_DIR

BANKSEL PORTA
btfss STATUS, C ; Set the register select
bcf LCD_RS
btfsc STATUS, C
bsf LCD_RS

bsf LCD_RW ;Read = 1

NOP
NOP

bsf LCD_E ; Setup to clock data

NOP
NOP
NOP
NOP

btfss LCD_D7 ; Get high nibble
bcf temp_rd, 7
btfsc LCD_D7
bsf temp_rd, 7
btfss LCD_D6
bcf temp_rd, 6
btfsc LCD_D6
bsf temp_rd, 6
btfss LCD_D5
bcf temp_rd, 5
btfsc LCD_D5
bsf temp_rd, 5
btfss LCD_D4
bcf temp_rd, 4
btfsc LCD_D4
bsf temp_rd, 4

bcf LCD_E ; Finished reading the data

NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP

bsf LCD_E ; Setup to clock data

NOP
NOP

btfss LCD_D7 ; Get low nibble
bcf temp_rd, 3
btfsc LCD_D7
bsf temp_rd, 3
btfss LCD_D6

發表於: 2005/7/26 15:00
頂部


程式除錯
#30
中級會員
中級會員


大家好 這是我用中斷寫的蜂鳴器程式 我希望響聲一秒後停止
但是我試過了 蜂鳴器還是持續叫著 請各位高手 給予校正
謝謝 以下是我的程式碼
list p=16F873a
#include <p16f873a.inc> ; Include file locate at defult directory

w_temp equ 0x20 ;定義暫存器位址w_temp,STATUS_temp,
STATUS_temp equ 0x21
scaler equ 0x22 ;定義暫存器scaler,blankcnt位址
blankcnt equ 0x23
maxcount equ .10 ;定義maxcount為數值50
SOUNDDELAY1 equ 0x33


;********************************************

;*********************************************
org 0x00 ;初始位置為0x00
goto Main
nop ;利用ICD偵錯時,程式第一個位址需填入nop
org 0x04 ;中斷位置
goto IntServ

IntServ
movwf w_temp ;將w暫存器內容儲存
swapf STATUS_temp,w ;將STATUS暫存器高低byte內容交換
movwf STATUS_temp ;交換後,存至STATUS_temp中
btfsc PIR1,TMR1IF ;判斷Timer1是否中斷
call Timer1 ;當Timer1有溢位中斷產生,呼叫中斷服務程式
swapf STATUS_temp,w ;將中斷前STATUS內容重新載入
movwf STATUS
swapf w_temp,f ;將中斷前w內容重新載入
swapf w_temp,w

Timer1
banksel PIR1 ;選擇PIR1放置的Bank
bcf PIR1,TMR1IF ;將Timer1的致能旗標清除
clrf TMR1L ;把Timer1L清為零,防止進位
movlw 0xf8 ;
movwf TMR1H ;Timer1H載入f8h
movlw 0x2f ;Timer1L載入2fh
movwf TMR1L ;所以Timer1會從f82fh計數到溢位中斷產生,剛好為2000(2ms)
banksel maxcount
movlw maxcount
movwf blankcnt
return

banksel PORTC ;定義PORTC,清除PORTC
CLRF PORTC
BSF STATUS,RP0 ;
MOVLW b'00000000' ;定義TRISC為輸出模式
MOVWF TRISC
BCF STATUS,RP0
SOUND
MOVLW 222 ;1/222,450HZ
BSF PORTC,2 ;將蜂鳴器打開
CALL SOUNDDELAY0 ;呼叫延遲
BCF PORTC,2 ;關閉延遲

MOVLW 222 ;反覆鳴叫
CALL SOUNDDELAY0
GOTO SOUND
;---------------------Main-------------------------------------------------------------
Main
call initial
bcf PORTC,2

;---------------------sounddelay---------------------------------------------------
SOUNDDELAY0
MOVWF SOUNDDELAY1 ;將222放入暫存器
SOUNDDELAYUS_1 ;每一個指令為1us,所以延遲為222*5us+1=1111us,為900Hz
NOP
NOP
DECFSZ SOUNDDELAY1
GOTO SOUNDDELAYUS_1
retfie

;-------------------------------------------------------------------------------------
initial
banksel maxcount
movlw maxcount
movwf blankcnt ;將常數值maxcount載入blankcnt暫存器
movlw b'00000000'
movwf PORTC ;將PORTB的LED清除
;movlw 0x04 ;初始值4,scaler
;movwf scaler
banksel TRISC
clrf TRISC ;定義PORTB為輸出阜
banksel T1CON
clrf T1CON ;設定Timer1時脈為Fosc/4

clrf TMR1H ;將Timer1內容清為零
clrf TMR1L
clrf INTCON ;將INTCON內容清為零
bsf INTCON,PEIE ;將周邊功能的中斷致能
banksel PIE1
clrf PIE1 ;將PIE1內容清為零
bsf PIE1,TMR1IE ;將Timer1溢位中斷致能
banksel PIR1
clrf PIR1
banksel TMR1L
clrf TMR1L
movlw 0xf8
movwf TMR1H
movlw 0x2f
movwf TMR1L
bsf T1CON,TMR1ON ;讓Timer1開始計數
banksel INTCON
bsf INTCON,GIE ;將中斷總開關打開,使中斷可以產生
return

;----------------Blink--------------------------------------------------------------------------
;Blink
; decfsz blankcnt,f ;blankcnt減1
; goto blinkend ;若blankcnt不為零,跳離Blink副程式
; bcf PORTC,2

;blinkend
; return

;-------------------------------------------------------
end

發表於: 2005/7/25 13:51
頂部



« 1 2 (3) 4 5 »



:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------