Im using a PIC18F micro and wanted to know how would i go about making a parity ODD bit for a byte. Any help would be great!
I know what it is and stuff just cant wrap my mind on how to check them all? i know i can loop through each bit in the byte and have a count byte and increment it with every 1 but how to i check if its even or odd number?
;ParityTest
clrf WREG
movf (count2 % 2),W
movwf parity
movlw 0x00
CPFSGT parity
call SendZero
CPFSEQ parity
call SendOne
CALC_PARITY MACRO ARG_BYTE
SWAPF ARG_BYTE, W
XORWF ARG_BYTE, F
RRCF ARG_BYTE, W
XORWF ARG_BYTE, F
BTFSC ARG_BYTE, 2
INCF ARG_BYTE, F
ENDM
;..................................................................................
;..................................................................................
;.........................................
;ParityTest
CALC_PARITY parity
btfsc parity,0
call SendZero
btfss parity,0
call SendOne
ESC = 0x3B
F1 = 0x82
F2 = 0x03
F3 = 0x02
F4 = 0x06
F5 = 0x81
F6 = 0x85
F7 = 0xC1
F8 = 0x05
F9 = 0x80
F10 = 0x84
F11 = 0x3C
F12 = 0x83
*PRINT SCREEN = 0x70 0x09
SCROLL LOCK = 0x3F
PAUSE = 0xF0
` = 0x07
1 = 0x0B
2 = 0x0F
3 = 0x13
4 = 0x92
5 = 0x17
6 = 0x1B
7 = 0x9E
8 = 0x1F
9 = 0x23
0 = 0xA2
- = 0x27
= = 0xAA
BACKSPACE = 0x33
TAB = 0x86
q = 0x8A
w = 0x8E
e = 0x12
r = 0x96
t = 0x16
y = 0x9A
u = 0x1E
i = 0xA1
o = 0x22
p = 0xA6
[ = 0x2A
] = 0xAD
\ = 0xAE
CAPS = 0x2C
a = 0x0E
s = 0x8D
d = 0x91
f = 0x95
g = 0x1A
h = 0x99
j = 0x9D
k = 0x21
l = 0xA5
; = 0x26
' = 0x29
ENTER = 0x2D
SHIFTL = 0x09
z = 0x0D
x = 0x11
c = 0x90
v = 0x15
b = 0x19
n = 0x98
m = 0x1D
, = 0xA0
. = 0xA4
/ = 0x25
SHIFTR = 0xAC
*CTRL-L = 0x0A
*WIN-L = 0x70 0x8F
*ALT-L = 0x88
*SPACE = 0x94
*ALT-R = 0x70 0x88
*WIN-R = 0x70 0x93
*PROPERTIES = 0x70 0x97
*CTRL-R = 0x70 0x0A
*INSERT = 0x70 0xBA
*HOME = 0x36
*PAGE UP = 0xBE
*DELETE = 0xB8
*END = 0xB4
*PAGE DOWN = 0x3D
*UP = 0x70 0x85
*LEFT = 0x70 0xB5
*DOWN = 0x70 0x39
*RIGHT = 0x70 0x3A
converttoascii:
movlw 0xA2
cpfseq kbdata
bra $+8
movlw 0x30
movwf kbdata
goto doneA
movlw 0x0B
cpfseq kbdata
bra $+8
movlw 0x31
movwf kbdata
goto doneA
movlw 0x0F
cpfseq kbdata
bra $+8
movlw 0x32
movwf kbdata
goto doneA
movlw 0x13
cpfseq kbdata
bra $+8
movlw 0x33
movwf kbdata
goto doneA
movlw 0x92
cpfseq kbdata
bra $+8
movlw 0x34
movwf kbdata
goto doneA
movlw 0x17
cpfseq kbdata
bra $+8
movlw 0x35
movwf kbdata
goto doneA
movlw 0x1B
cpfseq kbdata
bra $+8
movlw 0x36
movwf kbdata
goto doneA
movlw 0x9E
cpfseq kbdata
bra $+8
movlw 0x37
movwf kbdata
goto doneA
movlw 0x1F
cpfseq kbdata
bra $+8
movlw 0x38
movwf kbdata
goto doneA
movlw 0x23
cpfseq kbdata
bra $+8
movlw 0x39
movwf kbdata
goto doneA
dt 0xA2,0x30
dt 0x0B,0x31
Private Sub Form_Load()
Dim i As Integer
For i = 0 To 255
Text1.Text = Text1.Text & vbNewLine & " retlw ' ' ;" & Hex(i)
Next i
End Sub
retlw ' ' ;0
retlw ' ' ;1
retlw ' ' ;2
retlw ' ' ;3
retlw ' ' ;4
retlw ' ' ;5
retlw ' ' ;6
retlw ' ' ;7
retlw ' ' ;8
retlw ' ' ;9
retlw ' ' ;A
retlw ' ' ;B
retlw ' ' ;C
retlw ' ' ;D
retlw ' ' ;E
retlw ' ' ;F
retlw ' ' ;10
retlw ' ' ;11
retlw ' ' ;12
retlw ' ' ;13
retlw ' ' ;14
retlw ' ' ;15
retlw ' ' ;16
retlw ' ' ;17
retlw ' ' ;18
retlw ' ' ;19
retlw ' ' ;1A
retlw ' ' ;1B
retlw ' ' ;1C
retlw ' ' ;1D
retlw ' ' ;1E
retlw ' ' ;1F
retlw ' ' ;20
retlw ' ' ;21
retlw ' ' ;22
retlw ' ' ;23
retlw ' ' ;24
retlw ' ' ;25
retlw ' ' ;26
retlw ' ' ;27
retlw ' ' ;28
retlw ' ' ;29
retlw ' ' ;2A
retlw ' ' ;2B
retlw ' ' ;2C
retlw ' ' ;2D
retlw ' ' ;2E
retlw ' ' ;2F
retlw ' ' ;30
retlw ' ' ;31
retlw ' ' ;32
retlw ' ' ;33
retlw ' ' ;34
retlw ' ' ;35
retlw ' ' ;36
retlw ' ' ;37
retlw ' ' ;38
retlw ' ' ;39
retlw ' ' ;3A
retlw ' ' ;3B
retlw ' ' ;3C
retlw ' ' ;3D
retlw ' ' ;3E
retlw ' ' ;3F
retlw ' ' ;40
retlw ' ' ;41
retlw ' ' ;42
retlw ' ' ;43
retlw ' ' ;44
retlw ' ' ;45
retlw ' ' ;46
retlw ' ' ;47
retlw ' ' ;48
retlw ' ' ;49
retlw ' ' ;4A
retlw ' ' ;4B
retlw ' ' ;4C
retlw ' ' ;4D
retlw ' ' ;4E
retlw ' ' ;4F
retlw ' ' ;50
retlw ' ' ;51
retlw ' ' ;52
retlw ' ' ;53
retlw ' ' ;54
retlw ' ' ;55
retlw ' ' ;56
retlw ' ' ;57
retlw ' ' ;58
retlw ' ' ;59
retlw ' ' ;5A
retlw ' ' ;5B
retlw ' ' ;5C
retlw ' ' ;5D
retlw ' ' ;5E
retlw ' ' ;5F
retlw ' ' ;60
retlw ' ' ;61
retlw ' ' ;62
retlw ' ' ;63
retlw ' ' ;64
retlw ' ' ;65
retlw ' ' ;66
retlw ' ' ;67
retlw ' ' ;68
retlw ' ' ;69
retlw ' ' ;6A
retlw ' ' ;6B
retlw ' ' ;6C
retlw ' ' ;6D
retlw ' ' ;6E
retlw ' ' ;6F
retlw ' ' ;70
retlw ' ' ;71
retlw ' ' ;72
retlw ' ' ;73
retlw ' ' ;74
retlw ' ' ;75
retlw ' ' ;76
retlw ' ' ;77
retlw ' ' ;78
retlw ' ' ;79
retlw ' ' ;7A
retlw ' ' ;7B
retlw ' ' ;7C
retlw ' ' ;7D
retlw ' ' ;7E
retlw ' ' ;7F
retlw ' ' ;80
retlw ' ' ;81
retlw ' ' ;82
retlw ' ' ;83
retlw ' ' ;84
retlw ' ' ;85
retlw ' ' ;86
retlw ' ' ;87
retlw ' ' ;88
retlw ' ' ;89
retlw ' ' ;8A
retlw ' ' ;8B
retlw ' ' ;8C
retlw ' ' ;8D
retlw ' ' ;8E
retlw ' ' ;8F
retlw ' ' ;90
retlw ' ' ;91
retlw ' ' ;92
retlw ' ' ;93
retlw ' ' ;94
retlw ' ' ;95
retlw ' ' ;96
retlw ' ' ;97
retlw ' ' ;98
retlw ' ' ;99
retlw ' ' ;9A
retlw ' ' ;9B
retlw ' ' ;9C
retlw ' ' ;9D
retlw ' ' ;9E
retlw ' ' ;9F
retlw ' ' ;A0
retlw ' ' ;A1
retlw ' ' ;A2
retlw ' ' ;A3
retlw ' ' ;A4
retlw ' ' ;A5
retlw ' ' ;A6
retlw ' ' ;A7
retlw ' ' ;A8
retlw ' ' ;A9
retlw ' ' ;AA
retlw ' ' ;AB
retlw ' ' ;AC
retlw ' ' ;AD
retlw ' ' ;AE
retlw ' ' ;AF
retlw ' ' ;B0
retlw ' ' ;B1
retlw ' ' ;B2
retlw ' ' ;B3
retlw ' ' ;B4
retlw ' ' ;B5
retlw ' ' ;B6
retlw ' ' ;B7
retlw ' ' ;B8
retlw ' ' ;B9
retlw ' ' ;BA
retlw ' ' ;BB
retlw ' ' ;BC
retlw ' ' ;BD
retlw ' ' ;BE
retlw ' ' ;BF
retlw ' ' ;C0
retlw ' ' ;C1
retlw ' ' ;C2
retlw ' ' ;C3
retlw ' ' ;C4
retlw ' ' ;C5
retlw ' ' ;C6
retlw ' ' ;C7
retlw ' ' ;C8
retlw ' ' ;C9
retlw ' ' ;CA
retlw ' ' ;CB
retlw ' ' ;CC
retlw ' ' ;CD
retlw ' ' ;CE
retlw ' ' ;CF
retlw ' ' ;D0
retlw ' ' ;D1
retlw ' ' ;D2
retlw ' ' ;D3
retlw ' ' ;D4
retlw ' ' ;D5
retlw ' ' ;D6
retlw ' ' ;D7
retlw ' ' ;D8
retlw ' ' ;D9
retlw ' ' ;DA
retlw ' ' ;DB
retlw ' ' ;DC
retlw ' ' ;DD
retlw ' ' ;DE
retlw ' ' ;DF
retlw ' ' ;E0
retlw ' ' ;E1
retlw ' ' ;E2
retlw ' ' ;E3
retlw ' ' ;E4
retlw ' ' ;E5
retlw ' ' ;E6
retlw ' ' ;E7
retlw ' ' ;E8
retlw ' ' ;E9
retlw ' ' ;EA
retlw ' ' ;EB
retlw ' ' ;EC
retlw ' ' ;ED
retlw ' ' ;EE
retlw ' ' ;EF
retlw ' ' ;F0
retlw ' ' ;F1
retlw ' ' ;F2
retlw ' ' ;F3
retlw ' ' ;F4
retlw ' ' ;F5
retlw ' ' ;F6
retlw ' ' ;F7
retlw ' ' ;F8
retlw ' ' ;F9
retlw ' ' ;FA
retlw ' ' ;FB
retlw ' ' ;FC
retlw ' ' ;FD
retlw ' ' ;FE
retlw ' ' ;FF
LIST P=18F2525 ;directive to define processor
#include <P18F2525.INC> ;processor specific variable definitions
CONFIG OSC = INTIO67, WDT = OFF, LVP = OFF, XINST = OFF
#define kbt TRISC
#define kb PORTC
#define kbl LATC
#define kb_dat 1
#define kb_clk 2
CBLOCK 0x000
d1
d2
d3
count
Xmit_Byte
parity
kbdata
pntr
somedata
ENDC
CALC_PARITY MACRO ARG_BYTE
SWAPF ARG_BYTE, W
XORWF ARG_BYTE, F
RRCF ARG_BYTE, W
XORWF ARG_BYTE, F
BTFSC ARG_BYTE, 2
INCF ARG_BYTE, F
ENDM
ORG 0x0000
bra Init
ORG 0x0008
bra HighInt
AlphaA
addwf PCL, f
retlw ' ' ;0
retlw ' ' ;1
retlw ' ' ;2
retlw ' ' ;3
retlw ' ' ;4
retlw ' ' ;5
retlw ' ' ;6
retlw '`' ;7
retlw ' ' ;8
retlw ' ' ;9
retlw ' ' ;A
retlw '1' ;B
retlw ' ' ;C
retlw 'z' ;D
retlw 'a' ;E
retlw '2' ;F
retlw ' ' ;10
retlw 'x' ;11
retlw 'e' ;12
retlw '3' ;13
retlw ' ' ;14
retlw 'v' ;15
retlw 't' ;16
retlw '5' ;17
retlw ' ' ;18
retlw 'b' ;19
retlw 'g' ;1A
retlw '6' ;1B
retlw ' ' ;1C
retlw 'm' ;1D
retlw 'u' ;1E
retlw '8' ;1F
retlw ' ' ;20
retlw 'k' ;21
retlw 'o' ;22
retlw '9' ;23
retlw ' ' ;24
retlw 0x2F ;25
retlw ';' ;26
retlw '-' ;27
retlw ' ' ;28
retlw 0x27 ;29
retlw '[' ;2A
retlw ' ' ;2B
retlw ' ' ;2C
retlw ' ' ;2D
retlw ' ' ;2E
retlw ' ' ;2F
retlw ' ' ;30
retlw ' ' ;31
retlw ' ' ;32
retlw ' ' ;33
retlw ' ' ;34
retlw ' ' ;35
retlw ' ' ;36
retlw ' ' ;37
retlw ' ' ;38
retlw ' ' ;39
retlw ' ' ;3A
retlw ' ' ;3B
retlw ' ' ;3C
retlw ' ' ;3D
retlw ' ' ;3E
retlw ' ' ;3F
retlw ' ' ;40
retlw ' ' ;41
retlw ' ' ;42
retlw ' ' ;43
retlw ' ' ;44
retlw ' ' ;45
retlw ' ' ;46
retlw ' ' ;47
retlw ' ' ;48
retlw ' ' ;49
retlw 0x00
AlphaB
addwf PCL, f
retlw ' ' ;4A
retlw ' ' ;4B
retlw ' ' ;4C
retlw ' ' ;4D
retlw ' ' ;4E
retlw ' ' ;4F
retlw ' ' ;50
retlw ' ' ;51
retlw ' ' ;52
retlw ' ' ;53
retlw ' ' ;54
retlw ' ' ;55
retlw ' ' ;56
retlw ' ' ;57
retlw ' ' ;58
retlw ' ' ;59
retlw ' ' ;5A
retlw ' ' ;5B
retlw ' ' ;5C
retlw ' ' ;5D
retlw ' ' ;5E
retlw ' ' ;5F
retlw ' ' ;60
retlw ' ' ;61
retlw ' ' ;62
retlw ' ' ;63
retlw ' ' ;64
retlw ' ' ;65
retlw ' ' ;66
retlw ' ' ;67
retlw ' ' ;68
retlw ' ' ;69
retlw ' ' ;6A
retlw ' ' ;6B
retlw ' ' ;6C
retlw ' ' ;6D
retlw ' ' ;6E
retlw ' ' ;6F
retlw ' ' ;70
retlw ' ' ;71
retlw ' ' ;72
retlw ' ' ;73
retlw ' ' ;74
retlw ' ' ;75
retlw ' ' ;76
retlw ' ' ;77
retlw ' ' ;78
retlw ' ' ;79
retlw ' ' ;7A
retlw ' ' ;7B
retlw ' ' ;7C
retlw ' ' ;7D
retlw ' ' ;7E
retlw ' ' ;7F
retlw ' ' ;80
retlw ' ' ;81
retlw ' ' ;82
retlw ' ' ;83
retlw ' ' ;84
retlw ' ' ;85
retlw ' ' ;86
retlw ' ' ;87
retlw ' ' ;88
retlw ' ' ;89
retlw 'q' ;8A
retlw ' ' ;8B
retlw ' ' ;8C
retlw 's' ;8D
retlw 'w' ;8E
retlw ' ' ;8F
retlw 'c' ;90
retlw 'd' ;91
retlw '4' ;92
retlw ' ' ;93
retlw ' ' ;94
retlw 'f' ;95
retlw 'r' ;96
retlw ' ' ;97
retlw 'n' ;98
retlw 'h' ;99
retlw 0x00
AlphaC
addwf PCL, f
retlw 'y' ;9A
retlw ' ' ;9B
retlw ' ' ;9C
retlw 'j' ;9D
retlw '7' ;9E
retlw ' ' ;9F
retlw ',' ;A0
retlw 'i' ;A1
retlw '0' ;A2
retlw ' ' ;A3
retlw '.' ;A4
retlw 'l' ;A5
retlw 'p' ;A6
retlw ' ' ;A7
retlw ' ' ;A8
retlw ' ' ;A9
retlw '=' ;AA
retlw ' ' ;AB
retlw ' ' ;AC
retlw ']' ;AD
retlw 0x5C ;AE
retlw ' ' ;AF
retlw ' ' ;B0
retlw ' ' ;B1
retlw ' ' ;B2
retlw ' ' ;B3
retlw ' ' ;B4
retlw ' ' ;B5
retlw ' ' ;B6
retlw ' ' ;B7
retlw ' ' ;B8
retlw ' ' ;B9
retlw ' ' ;BA
retlw ' ' ;BB
retlw ' ' ;BC
retlw ' ' ;BD
retlw ' ' ;BE
retlw ' ' ;BF
retlw ' ' ;C0
retlw ' ' ;C1
retlw ' ' ;C2
retlw ' ' ;C3
retlw ' ' ;C4
retlw ' ' ;C5
retlw ' ' ;C6
retlw ' ' ;C7
retlw ' ' ;C8
retlw ' ' ;C9
retlw ' ' ;CA
retlw ' ' ;CB
retlw ' ' ;CC
retlw ' ' ;CD
retlw ' ' ;CE
retlw ' ' ;CF
retlw ' ' ;D0
retlw ' ' ;D1
retlw ' ' ;D2
retlw ' ' ;D3
retlw ' ' ;D4
retlw ' ' ;D5
retlw ' ' ;D6
retlw ' ' ;D7
retlw ' ' ;D8
retlw ' ' ;D9
retlw 0x00
AlphaD
addwf PCL, f
retlw ' ' ;DA
retlw ' ' ;DB
retlw ' ' ;DC
retlw ' ' ;DD
retlw ' ' ;DE
retlw ' ' ;DF
retlw ' ' ;E0
retlw ' ' ;E1
retlw ' ' ;E2
retlw ' ' ;E3
retlw ' ' ;E4
retlw ' ' ;E5
retlw ' ' ;E6
retlw ' ' ;E7
retlw ' ' ;E8
retlw ' ' ;E9
retlw ' ' ;EA
retlw ' ' ;EB
retlw ' ' ;EC
retlw ' ' ;ED
retlw ' ' ;EE
retlw ' ' ;EF
retlw ' ' ;F0
retlw ' ' ;F1
retlw ' ' ;F2
retlw ' ' ;F3
retlw ' ' ;F4
retlw ' ' ;F5
retlw ' ' ;F6
retlw ' ' ;F7
retlw ' ' ;F8
retlw ' ' ;F9
retlw ' ' ;FA
retlw ' ' ;FB
retlw ' ' ;FC
retlw ' ' ;FD
retlw ' ' ;FE
retlw ' ' ;FF
retlw 0x00
Init:
movlw 0x72
movwf OSCCON ;8 Mhz
movlw 0x0F
movwf ADCON1 ;All Digital
bcf kbt, kb_dat ;make kb data line ouput
bcf kbt, kb_clk ;make kb clock line ouput
call Delay100uS
movlw 0xF4
call SendKB
call Delay100uS
clrf pntr
Main:
call GetKB
bra Main
GetKB:
MOVLW 0x08 ;set up to read 8 bits
MOVWF count
CLRF kbdata
btfsc kb, kb_clk
bra $-2
btfss kb, kb_clk
bra $-2
btfsc kb, kb_clk
bra $-2
MyByte:
;call Delay10us
btfss kb, kb_dat
bcf kbdata,7
btfsc kb, kb_dat
bsf kbdata,7
rrncf kbdata, f
btfss kb, kb_clk
bra $-2
btfsc kb, kb_clk
bra $-2
decfsz count , f ;test if all done
goto MyByte
call Delay40uS
call Delay40uS
call Delay40uS
call Delay40uS
;movlw 0x70
;cpfseq kbdata
;bra $+4
;goto startget
movf kbdata, W
movlw 0xD9
cpfsgt kbdata
bra $+6
subwf kbdata, 0
call AlphaD
movlw 0x99
cpfsgt kbdata
bra $+6
subwf kbdata, 0
call AlphaC
movlw 0x49
cpfsgt kbdata
bra $+6
subwf kbdata, 0
call AlphaB
movlw 0x4A
cpfslt kbdata
bra $+6
movf kbdata
call AlphaA
doneA:
movlw somedata ;set starting address of my table
addwf pntr,0
movwf FSR0L
movf kbdata, W
movwf INDF0
incf pntr
call Delay300mS
RETURN
SendKB:
bcf kbt, kb_dat
bcf kbt, kb_clk
clrf count
movwf Xmit_Byte
movff Xmit_Byte,parity
movlw 0x08
movwf count
d_loop:
rrcf Xmit_Byte, 1
btfss STATUS, C
call SendZero
btfsc STATUS, C
call SendOne
decfsz count
goto d_loop
;ParityTest
CALC_PARITY parity
btfsc parity,0
call SendZero
btfss parity,0
call SendOne
;StopBit
call SendOne
bsf kbt, kb_dat ;make kb data line input
bsf kbt, kb_clk ;make kb clock line input
return
SendOne:
bcf kbl, kb_clk
bsf kbl, kb_dat
call Delay40uS
bsf kbl, kb_clk
return
SendZero:
bcf kbl, kb_clk
bcf kbl, kb_dat
call Delay40uS
bsf kbl, kb_clk
return
Delay300mS
movlw 0xD1
movwf d1
movlw 0x4F
movwf d2
movlw 0x02
movwf d3
Delay300mS_0
decfsz d1, f
goto $+6
decfsz d2, f
goto $+6
decfsz d3, f
goto Delay300mS_0
return
Delay10us
movlw 0x10
movwf d1
Delay30us_0
decfsz d1, f
goto Delay30us_0
nop
return
Delay50mS
movlw 0x1E
movwf d1
movlw 0x4F
movwf d2
Delay50mS_0
decfsz d1, f
goto $+6
decfsz d2, f
goto Delay50mS_0
goto $+2
nop
return
Delay100uS
movlw 0x41
movwf d1
Delay100uS_0
decfsz d1, f
goto Delay100uS_0
return
Delay40uS
movlw 0x19
movwf d1
Delay40uS_0
decfsz d1, f
goto Delay40uS_0
return
Delay1S
movlw 0x11
movwf d1
movlw 0x5D
movwf d2
movlw 0x05
movwf d3
Delay1S_0
decfsz d1, f
goto $+6
decfsz d2, f
goto $+6
decfsz d3, f
goto Delay1S_0
return
HighInt:
retfie FAST
END
You can do tables with 'dt' directive or individual 'retlw' lines on the 18F' but people often forget that the index value must be multiplied by 2 before applying it or adding it to the program counter registers.
You might also consider using the TBLPTR mechanism to access rom tables.
I guess i got stuck in 16F mode lol
ok im lost can someone make a sample table with like 2 entries.
i will take it from there.
movlw upper MyTable
movwf TBLPTRU
movwf high MyTable
movwf TBLPTRH
movlw low MyTable
movwf TBLPTRL
;repeat the following lines as necessary
movf kbdata, W
addwf TBLPTR
tblrd *+ ;use TBLPTRU:TBLPTRH:TBLPTRL as 24-bit pointer to memory
movf TABLAT,w ;place value pointed to in W
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?