ó õ×ÁÖÅÎÉÅÍ å×ÇÅÎÉÊ.
õÄÁÞÕ ÎÁÄÏ ÎÅ ÖÄÁÔØ, Á ÄÅÌÁÔØ.
Evgeniy Dontsov пишет: ED> Привет All
ED> Kто поделится исходником для PIC16 вывод
16-bit на LED индикатор. ED> Hапример 0xFFFF на индикаторе 65535ED> С Уважением Евгений.
ED> Удачу надо не ждать, а делать.
09 ñÎ× 05 ÇÏÄÁ (Á ÂÙÌÏ ÔÏÇÄÁ 23:53) Evgeniy Dontsov × Ó×ÏÅÍ ÐÉÓØÍÅ Ë All ÐÉÓÁÌ:
ED> KÔÏ ÐÏÄÅÌÉÔÓÑ ÉÓÈÏÄÎÉËÏÍ ÄÌÑ PIC16 ×Ù×ÏÄ 16-bit ÎÁ LED ÉÎÄÉËÁÔÏÒ. ED> HÁÐÒÉÍÅÒ 0xFFFF ÎÁ ÉÎÄÉËÁÔÏÒÅ 65535
ðÉÓÁÌ ËÏÇÄÁ-ÔÏ, ÐÏ ÍÏÔÉ×ÁÍ ËÁËÏÇÏ-ÔÏ ÞÁÓÔÏÔÏÍÅÒÁ , ÔÏÌØËÏ ÎÅ 16 ÂÉÔ, Á 24, ÐÒÁ×ÉÔØÓÑ ÏÞÅÎØ ÐÒÏÓÔÏ.========= ËÕÓØ ====================
LIST P=16f84 ; 4 íçà #include <p16f84.inc> ; processor specific variable definitions ;--------------------------------------------- LED0 equ 0x10 ; ÍÌÁÄÛÉÊ LED1 equ 0x11 ; LED2 equ 0x12 ; LED3 equ 0x13 ; ÑÞÅÊËÉ LED4 equ 0x14 ; ÉÎÄÉËÁÔÏÒÁ LED5 equ 0x15 ; LED6 equ 0x16 ; LED7 equ 0x17 ; ÓÔÁÒÛÉÊ LEDIndex equ 0x1D ; ÕËÁÚÁÔÅÌØ LED Count equ 0x20 ; óÞÅÔÞÉË ÄÌÑ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ TL equ 0x21 ; ÍÌÁÄÛÉÊ úHáþåHéñ Háðòõçé TM equ 0x22 ; ÓÒÅÄÎÉÊ ðÏÓÌÅ ÕÓÒÅÄÎÅÎÉÑ TH equ 0x23 ; ÓÔÁÒÛÉÊ Temp equ 0x25 ; ×ÒÅÍÅÎÎÁÑ ÐÅÒÅÍÅÎÎÁÑ Count1 equ 0x26 ; ÅÝÅ ÓÞÅÔÞÉË
; bits PORTA 0-2 - ÚÎÁËÏÍÅÓÔÏ ÎÁ ÉÎÄÉËÁÔÏÒÅ × Ä×ÏÉÞÎÏÍ ×ÉÄÅ ; PORTB - Ë ÓÅÇÍÅÎÔÁÍ ÉÎÄÉËÁÔÏÒÁ ; ïÂÝÉÊ ËÁÔÏÄ/ÁÎÏÄ ÐÒÁ×ÉÔØÓÑ × LCDTable É × ËÌÀÞÁÈ ; ÐÏÓÌÅ ÄÅÛÉÆÒÁÔÏÒÁ ÎÁ PORTA ========= ËÕÓØ ====================
org 0x0000 ... call Int_rd ; ÓÄÅÓØ ÐÏÄÇÏÔÁ×ÌÉ×ÁÅÍ ×ÓÅ ÄÁÎÎÙÅ
;--------------------------------------------- ; ïÓÎÏ×ÎÏÊ ÃÉËÌ ÉÎÄÉËÁÃÉÉ LEDCycle movlw LED0 ; w:= `HÏÍÅÒ LED0` addwf LEDIndex,W ; HÏÍÅÒLED0 + LEDIndex -> W movwf FSR ; W -> FSR movf INDF,W ; LED(0..6) -> W call LCDTable ; W -> ÓÅÍÉÓÅÇÍÅÎÔÎÙÊ ËÏÄ movwf Temp ; Temp:= w movlw 7 ; úÁÐÑÔÁÑ ÎÁ ÓÔÁÒÛÅÍ ÉÎÄÉËÁÔÏÒÅ subwf LEDIndex,W ; w:= LEDIndex - w btfsc STATUS,Z ; if !0 - skip bcf Temp,7 ; Temp(7bit) -> 0 movf Temp,W ; w:= Temp movwf PORTB ; ×Ù×ÏÄ ÃÉÆÒÙ × PortB movf LEDIndex,W ; W := LEDIndex andlw 7 movwf PORTA ; ×Ù×ÏÄ ÐÏÚÉÃÉÉ × PORTA movlw 0xFF ; ãÉËÌ ÏÖÉÄÁÎÉÑ - movwf Count ; - Rettt ; - bcf STATUS,Z ; - decf Count,F ; - btfss STATUS,Z ; - goto Rettt ; ------------- incf LEDIndex,F ; LEDIndex:= LEDIndex + 1 movlw 8 ; w:= 8 is 8th? bcf STATUS,Z ; óÂÒÏÓÉÔØ ÆÌÁÇ Zero subwf LEDIndex,W ; w:= LEDIndex - w btfss STATUS,Z ; if Z=1 then _×ÓÅ 8 ÃÉÆÒ ×Ù×ÅÌÉ goto LEDCycle ; ÓÌÅÄÕÀÝÁÑ ÃÉÆÒÁ clrf LEDIndex movlw 0xFF movwf PORTB ; çÁÓÉÍ ÉÎÄÉËÁÔÏÒ
call Int_rd ; þÔÅÎÉÅ ADC É ×ÙÞÉÓÌÅÎÉÑ goto LEDCycle ; úÁÃÉËÌÉ×ÁÅÍÓÑ ;============================================= ; ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ BCD -> 7 ÓÅÇÍÅÎÔÎÙÊ ËÏÄ LCDTable ; ÄÏÌÖÎÏ ÒÁÓÐÏÌÏÇÁÔØÓÑ × ÐÅÒ×ÙÈ 256 ÁÄÒÅÓÏ× ÐÁÍÑÔÉ addwf PCL,F ; W + PC -> PC retlw b'11000000' ; HGFEDCBA = '0' ïÂÒÁÚÙ retlw b'11110011' ; 1 retlw b'10001001' ; '2' ÃÉÆÒ retlw b'10100001' ; '3' retlw b'10110010' ; '4' × retlw b'10100100' ; '5' retlw b'10000100' ; '6' 7 ÓÅÇÍÅÎÔÎÏÍ retlw b'11110001' ; '7' retlw b'10000000' ; '8' ËÏÄÅ retlw b'10100000' ; '9' retlw b'11000010' ; 'V' retlw b'10011111' ; 'r' retlw b'11001100' ; 'C' retlw b'10111111' ; '-' retlw b'10001100' ; 'E' retlw b'11111111' ; ........ = ' ' ;=============================================
Int_rd ...
; ÷ÈÏÄÎÙÅ ÚÎÁÞÅÎÉÅ × TH, TM, TL
; ðÒÅÏÂÒÁÚÏ×ÁÎÉÅ BIN -> BCD -> LED bcf STATUS,C ; clear the carry bit movlw .24 movwf Count ; Count:= 24 clrf LED3 clrf LED2 clrf LED1 clrf LED0 loop16 rlf TL,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF rlf TM,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF rlf TH,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF rlf LED0,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF rlf LED1,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF rlf LED2,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF rlf LED3,f ; ä×ÉÇÁÅÍ ×ÌÅ×Ï ÞÅÒÅÚ CF decfsz Count,f ;Count:=Count-1,if Count=0 then skip next cmd goto adjDEC swapf LED3,w ; ÔÅÔÒÁÄÙ × LED3 ÍÅÎÑÀÔÓÑ ÍÅÓÔÁÍÉ andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED7 ; LED7:=w movfw LED3 ; w:= LED3 andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED6 ; LED6:=w swapf LED2,w ; ÔÅÔÒÁÄÙ × LED2 ÍÅÎÑÀÔÓÑ ÍÅÓÔÁÍÉ andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED5 ; LED5:=w movfw LED2 ; w:= LED2 andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED4 ; LED4:=w swapf LED1,w ; ÔÅÔÒÁÄÙ × LED1 ÍÅÎÑÀÔÓÑ ÍÅÓÔÁÍÉ andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED3 ; LED3:=w movfw LED1 ; w:= LED1 andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED2 ; LED2:=w swapf LED0,w ; ÔÅÔÒÁÄÙ × LED0 ÍÅÎÑÀÔÓÑ ÍÅÓÔÁÍÉ andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED1 ; LED1:=w movfw LED0 ; w:= LED0 andlw 0Fh ; É -> w, w-> AND `00001111` movwf LED0 ; LED0:=w return ; ðÏÌÎÙÊ ×ÏÚ×ÒÁÔ adjDEC movlw LED0 ; w:= `HÏÍÅÒ LED0` movwf FSR ; FSR:= w call adjBCD movlw LED1 ; w:= `HÏÍÅÒ LED1` movwf FSR ; FSR:= w call adjBCD movlw LED2 ; w:= `HÏÍÅÒ LED2` movwf FSR ; FSR:= w call adjBCD movlw LED3 ; w:= `HÏÍÅÒ LED3` movwf FSR ; FSR:= w call adjBCD goto loop16 adjBCD movlw 3 ; w:= 3 addwf 0,W ; w:= IndF + 3 movwf Count1 ; Count1:= w btfsc Count1,3 ; test if result > 7 ; if 3ÂÉÔ Count1=0 - skip next cmd movwf 0 ; IndF:= w movlw 30 ; w:= 30 addwf 0,W ; w:= IndF + 30 movwf Count1 ; Count1:= w btfsc Count1,7 ; test if result > 7 ; if 7ÂÉÔ Count1=0 - skip next cmd movwf 0 ; save as MSD ; IndF:= w retlw 0 ; w:= 0
========= ËÕÓØ ====================
PS : 2 ÷ï: ëÁË ÔÙ ÓÅÂÅ ÐÒÅÄÓÔÁ×ÌÑÅÛØ ÓÔÁÔÉÞÅÓËÕÀ ÉÎÄÉËÁÃÉÀ
5-À ÓÅÍÉÓÅÇÍÅÎÔÎÙÍÉ ÉÎÄÉËÁÔÏÒÁÍÉ ÏÄÎÉÍ PIC`ÏÍ ? ó Õ×ÁÖÅÎÉÅÍ, Andrey 11 ñÎ× 05 ÇÏÄÁE-mail: a_biv<ÓÁÂÁ>rambler.ru ICQ: 226793191
... äÏÖÄÉË ÌÅÊ, ×ÅÔÅp ÄÕÊ, ÐpÏÇÒÁÍÍÉÓÔÁÍ ÈÏÔØ ÂÙ ÞÔÏ...
Have something to add? Share your thoughts — no account required.
Ask the community — no account required