۱۳-شهریور-۱۳۹۳, ۲۱:۱۱:۳۲
سلام این برنامه رو از تو نت گرفتم که مربوط به spi به صورت نرم تفزتریه اما مقادیر رو کامل نمیخونه.فرض کنید مقادیر ولتاز رو که بخواد به صورت word نشون بده اگه مقدارش 1023 باشه.به صورت دوتا 512 نشون میده.یعنی از 0 تا 512 و دوباره از 0 تا512.اینم کد بزنامه.در ضمن ارتباط بین میکرو و یه مبدل خارجی .
اینم یه کد دیگه اما برنامه رو نمیتونم تو مد نرم افزاری راه بندازم.ولی تو مد سخت افزاری کاملا جواب میده
کد:
$regfile = "m32def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Cursor Off
Config Spi = Soft , Din = Pinb.6 , Ss = None , Clock = Pinb.7
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Dim One As Byte
Dim Two As Byte
Dim Final As Integer
Config Portb.4 = Output
Config Portb.6 = INput
Config Portb.7 = Output
Set Portb.4
Do
Reset Portb.4
One = Spimove(&Hff )
Two = Spimove(&Hff )
Set Portb.4
One = One And &H1F
Final = One
Shift Final , Left , 1
Shift Two , Right , 7
Final = Final Or Two
Locate 1 , 1
Lcd Final ; " "
Loop
اینم یه کد دیگه اما برنامه رو نمیتونم تو مد نرم افزاری راه بندازم.ولی تو مد سخت افزاری کاملا جواب میده
کد:
$regfile = "m8def.dat"
$crystal = 16000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = _
Portd.7 , E = Portd.2 , Rs = Portd.0
Config Single = Scientific , Digits = 2
Dim Adc_lsb As Byte
Dim Adc_msb As Byte
Dim Adc_value As Integer
Cursor Off Noblink
Spcr = Spcr Or &B01010001
Config Portb.5 = Output
Config Portb.2 = Output
Set Portb.2
Do
Reset Portb.2
Gosub Adc_read
Adc_msb = Spdr
Gosub Adc_read
Adc_lsb = Spdr
Set Portb.2
Adc_msb = Adc_msb And &B00011111
Adc_value = Adc_msb
Shift Adc_value , Left , 5
Shift Adc_lsb , Right , 3
Adc_value = Adc_value Or Adc_lsb
Locate 2 , 1
Lcd Adc_value ; " "
Loop
Adc_read:
Spdr = &H00
Bitwait Spsr.7 , Set
Return
End