සෙවන් සෙග්මන්ට් ඩිස්ප්ලේ
අපගේ හදුන්වාදීමේන් ඔබ මයික්රෝකොන්ට්රෝල ගැන යම් අවබෝධයක් ලබන්නට ඇතැයි සිතමු. අපගේ මෙම දෙවන අදියරේ පාඩමෙන් අප බලාපොරොත්තු වන්නේ දහයේ පාදයෙන් 0000 සිට 9999 දක්වා ඉහලට ගනින කවුන්ටර් එකක් සෑදීමයි. මෙමගින් ඔබට අළුත් විධාන සහ ක්රමවේද කීපයක්ද ඉගැන්වීමට බලාපොරොත්තු වෙමි.මෙම සෙවන් සෙග්මන්ට් ඩිස්ප්ලේ උපකරණ මයික්රෝකොන්ට්රෝල සමග ක්රියා කරන බින්දුවේ සිට නවය දක්වා ඉලක්කම් පෙන්විය හැකි උපකරණයකි.කොමන් ඇනෝඩ් සහ කොමන් කැතෝඩ් යනුවෙන් වර්ග දෙකක් වන අතර ඔබගේ අවශ්යතාවය අනුව වර්ගයක් තෝරාගත හැක.
කොමන් ඇනෝඩ් වර්ගය
කොමන් කැතෝඩ් වර්ගය
බින්දුවේ සිට නවය දක්වා ඉහලට කවුන්ට් වීමට කේතයක් ලියමු
බින්දුවේ සිට නවය ඉලක්කම් දල්වා ගන්නේ කෙසේද ??
සෙග්මන්ට් වලට පහත පිළිවෙලට විදුලිය සැපයූ කල 0 සිට 9 දක්වා දක්වා ඉලක්ම් ලබාගත හැකි බව ඔබට පෙනෙනවා ඇත. මෙය පෝර්ට් එකෙන් ලබාදෙන්නේ කෙසේද ????
ලුක් අප් ටේබල්
අපට මේ ක්රමය අනුගමනය කළ ගත හැකි වුවත් මීට වඩා වැඩි පැටන් ප්රමානයක් අවශය වූ විට මෙම ක්රමය අසීරු විය හැක. එම නිසා අපි මෙය කර ගැනීමට වගුවක් භාවිතා කරමු. ලුක් අප් ටේබල් නමින්ද හදුන්වන මෙය දත්ත සමූහයක් පිළිවෙලට කේතයට අවශය පරිදි ලබාදීමට භාවිතා කරයි.
addwf PCL
,1
RETLW B’11111110’; code
for 0
RETLW B’01100000’; code for 1
RETLW B’11011010’; code for 2
retlw b’11110010’ ; code for 3
retlw b’01100110’ ; code for 4
retlw b’10110110’ ; code for 5
retlw b’10111110 ; code for 6
retlw b’11100000’ ; code for 7
retlw b’11111110’ ; code for 8
retlw b’11110110’ ; code for 9
කවුන්ටරය සඳහා ගැලීම් සටහන
පරිපථ සටහන
පරිපථ සටහන
code
;************************************************************
; counter for single digit
;written by mikrohouse
;started on 2007/01/30
;**************************************************************
processor PIC16F84A ;Set the processor
radix hex ;Set the radix
#include <p16F84A.inc> ;Include header file
__CONFIG _RC_OSC & _PWRTE_OFF & _CP_OFF & _WDT_OFF
ORG 0x00
GOTO MAIN
ORG 0X04
GOTO INT_SER ;INTERUPT VECTOR
DIS1 EQU 0XC ;COUNTER
DISPLAY1 EQU 0XD ;PATTERN
MAIN
BANKSEL TRISA
CLRF TRISA
MOVLW 0X01
MOVWF TRISB
BANKSEL PORTA
CLRF PORTA ;SET BOTH AS OUT PUTS
CLRF PORTB
CLRF DIS1
CLRF DISPLAY1
MOVLW b'01111110'
MOVWF DISPLAY1
SCAN1
MOVF DISPLAY1,0
MOVWF PORTB
WAIT
BTFSS PORTB ,0
GOTO WAIT
INCF DIS1,1
MOVLW 0X0A
XORWF DIS1,0
BTFSS STATUS,Z
GOTO NZERO
GOTO ZERO
NZERO
MOVF DIS1,W
CALL TABLE
MOVWF DISPLAY1
GOTO SCAN1
ZERO
CLRF DIS1
MOVF DIS1,W
CALL TABLE
MOVWF DISPLAY1
GOTO SCAN1
TABLE ;Data table for seven segments...
ADDWF PCL,1
;gfedcba
RETLW b'01111110'
RETLW b'00001100'
RETLW b'10110110'
RETLW b'10011110'
RETLW b'11001100'
RETLW b'11011010'
RETLW b'11111010'
RETLW b'00001110'
RETLW b'11111110'
RETLW b'11011110'
DELAY
MOVLW 06H ;DELAY FOR SCAN
MOVWF 32H
S2 DECFSZ 32H,1
GOTO DELAY2.1
RETURN
DELAY2.1 MOVLW 50H
MOVWF 33H
S1 DECFSZ 33H,1
GOTO S1
GOTO S2
END
මෙහිදී ගැනීම සඳහා OC (DIS1) රෙජිස්ටරය භාවිතා කරන අතර BTFSS විධානය මගින් ස්විචය පරීක්ෂා කරන අතර තදවී ඇත්නම් INCF DIS1,1 මගින් රෙජිස්ටරයේ අගය එකකින් ඉහල දමනු ලැබේ .ඉන්පසු MOVF විධානය මගින් අගය W රෙජිස්ටරයට දමන අතර අනතුරුව ටේබල් එක කෝල් කරනු ලබයි.එහිදී ADDWF විධානය මගින් W රෙජිස්ටරයේ ඇති අගය PCL රෙජිස්ටරය සමග එකතු කරනු ලබයි.එහිදී ප්රෝග්රෑම් කවුන්ටරයේ අගය ඉහල යාම හේතුවෙන් රෙජිස්ටරයේ තිබු අගයට සමාන පේලි ගනනක් ටේබල් එක පහලට ගොස් එම අගය පෝර්ට් බී එකට ආදේශ වෙන නිසා එම අගය සෙග් මනට් එකට ලැබේ ..
නමුත් ටේබල් එකේ ඇත්තේ පේලි දහයක් පමණක් බැවින් කිසිම විටක රෙජිස්ටරයේ අගය දහය නොඉක්මවිය යුතුය.මෙය සිදු කිරීමට අප XOR තර්ක ක්රියාව භාවිතා කරමු .

මෙයින් කියැවෙන්නේ W රෙජිස්ටරයේ ඇති අගය ෆයිල් රෙජිස්ටරයක් සමග එක්ස් -ඕර් තර්ක ක්රියාවට භාජනය කරන ලෙසයි. යම් අගයන් දෙකක් සමානද යන්න බලා ගැනීමට භාවිතා කළ හැකි විධානයකි. යම් ගණිත කර්මයක අගය බින්දුව වූ විට ස්ටේටස් රෙජිස්ටර් එකේ සීරෝ බිට් එක බින්දුව වන බවට මා කලින් පැවසුවා ඔබට මතක ඇති. අපිට එකේ ඇති සංඛ්යාව දහය දැයි බැලීමට මෙම ක්රමය උපයෝගී කර ගත හැක. සමාන සංඛ්යා දෙකක් එක්ස් - ඕර් තර්ක ක්රියාවට කළ විට පිළීතුර බින්දුව වන බව දැනටමත් ඔබ දන්නවා ඇත. රෙජිස්ටරයේ අගය දහය වීද යන්න අගය එකකින් කින් ඉහල දැමෙන වාරයක් පාසා බැලිය යුතුය. නැත්නම් ටේබල් එකේ ඇත්තේ පේලි දහයක් පමණක් බැවින් එකොලොස් වන පේලියෙදී ප්රෝගෑම් එක ස්ටක් වේ.
all code files are at github https://github.com/mikrohouse/asm-tutorials
Comments
Post a Comment