seven segment with pic assembler(single digit)

 

සෙවන් සෙග්මන්ට් ඩිස්ප්ලේ


අපගේ හදුන්වාදීමේන් ඔබ මයික්‍රෝකොන්ට්‍රෝල ගැන යම් අවබෝධයක් ලබන්නට ඇතැයි සිතමු. අපගේ මෙම දෙවන අදියරේ පාඩමෙන් අප බලාපොරොත්තු වන්නේ දහයේ පාදයෙන් 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

Popular posts from this blog

plc tutorial sinhala

pic assembler eeprom

microc for pic