Ovaj kod radi i sve je ok.Ali ja hocu da sa sadasnjih 16 bita prosirim red na 32 bita
Citao sam na netu da se to radi sa nizom vise bajtova u promenijvoj kao na primer -red var byte [4]
ali ja to nemogu da ubacim u ovaj moj kod,ako neko moze da pomogne zahvaljujem.
mikrokontroler je pic 16f628a i za sada 2 - 74hc595 shift registra a ja bi da prosirim na 4 ili vise shift registara
Code:
Include "modedefs.bas" 'Include serial modes
'Define OSC 10 '8MHz crystal
CMCON = 7 'Disable comparator,start up in digital mode,PortA
'@ DEVICE INTRC_OSC
@ DEVICE ER_OSC_NOCLKOUT
@ DEVICE WDT_OFF ' Watchdog Timer
@ DEVICE PWRT_ON ' Power-On Timer
@ DEVICE MCLR_OFF ' Master Clear Options (Internal)
@ DEVICE BOD_ON ' Brown-Out Detect
@ DEVICE LVP_OFF ' Low-Voltage Programming
@ DEVICE CPD_OFF ' Data Memory Code Protect
@ DEVICE PROTECT_OFF ' Program Code Protectio
Symbol clock = PORTA.0
Symbol dat = PORTA.1
SYMBOL latch = PORTA.2
Red var word
a var byte
aux var word
karakter var byte
adr var byte
x var byte
karakter = 0
x = 0
a = 0
adr=0
red = 0
aux = 0
eeprom [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,65,65,65,34,0,127,8,8,8,127,0,127,73,73,65,0,127,20,34,65,0,62,65,65,65,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254]
portb = %11111111
trisb = %00000000
pocetak:
adr=0
dalje:
'*************************************************************
for x = 0 to 126
read adr,karakter
adr=adr+1
if karakter = 254 then pocetak
red.15 = karakter.0
gosub unos
gosub prikazi
gosub pomeri
goto dalje
next x
'***************************************************************
unos:
aux = red
For a = 1 To 16
If aux.15 = 0 Then
LOW dat
LOW clock
HIGH clock
Else
HIGH dat
LOW clock
HIGH clock
Endif
aux = aux<<1 'pomeranje u levo za 1
Next a
return
'**********************************************************************
prikazi:
'**********************************************************************
portb = %11111111
high LATCH
low latch
low portb.7
gosub pauza
return
'**********************************************************************
pomeri:
'**********************************************************************
red = red >> 1
return
'***********************************************************************
pauza:
pause 500
return
'***********************************************************************
END
Include "modedefs.bas" 'Include serial modes
'Define OSC 10 '8MHz crystal
CMCON = 7 'Disable comparator,start up in digital mode,PortA
'@ DEVICE INTRC_OSC
@ DEVICE ER_OSC_NOCLKOUT
@ DEVICE WDT_OFF ' Watchdog Timer
@ DEVICE PWRT_ON ' Power-On Timer
@ DEVICE MCLR_OFF ' Master Clear Options (Internal)
@ DEVICE BOD_ON ' Brown-Out Detect
@ DEVICE LVP_OFF ' Low-Voltage Programming
@ DEVICE CPD_OFF ' Data Memory Code Protect
@ DEVICE PROTECT_OFF ' Program Code Protectio
Symbol clock = PORTA.0
Symbol dat = PORTA.1
SYMBOL latch = PORTA.2
Red var word
a var byte
aux var word
karakter var byte
adr var byte
x var byte
karakter = 0
x = 0
a = 0
adr=0
red = 0
aux = 0
eeprom [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62,65,65,65,34,0,127,8,8,8,127,0,127,73,73,65,0,127,20,34,65,0,62,65,65,65,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254]
portb = %11111111
trisb = %00000000
pocetak:
adr=0
dalje:
'*************************************************************
for x = 0 to 126
read adr,karakter
adr=adr+1
if karakter = 254 then pocetak
red.15 = karakter.0
gosub unos
gosub prikazi
gosub pomeri
goto dalje
next x
'***************************************************************
unos:
aux = red
For a = 1 To 16
If aux.15 = 0 Then
LOW dat
LOW clock
HIGH clock
Else
HIGH dat
LOW clock
HIGH clock
Endif
aux = aux<<1 'pomeranje u levo za 1
Next a
return
'**********************************************************************
prikazi:
'**********************************************************************
portb = %11111111
high LATCH
low latch
low portb.7
gosub pauza
return
'**********************************************************************
pomeri:
'**********************************************************************
red = red >> 1
return
'***********************************************************************
pauza:
pause 500
return
'***********************************************************************
END