سلام روش خواندن یک فریم اطلاعات پورت سریال در AVR
یک فریم 8 بایتی داریم که بایت آغازین آن عدد CA هگز است و بایت پایانی آن عدد 35 هگز است و بین این دو عدد 6 بایت اطلاعات هگز داریم .مثلا:
35 CA 25 4f 58 ff c2 5a
برای گرفتن این فریم اطلاعات برنامه زیر را پیشنهاد می کنم .توجهک بایت های 2 تا 7 متغیرندو تنها بایت های استارت و استپ ثابت هستند.
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 38400
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 64
''====================================== ====================
Config Portb = Output
''====================================== =======================
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
''====================================== ===============
Config Lcd = 16 * 2
''====================================== ====================
Config Lcdpin = Pin , Db4 = Pinc.0 , Db5 = Pinc.1 , Db6 = Pinc.2 , Db7 = _
Pinc.3 , Rs = Pinc.4 , E = Pinc.5
''====================================== ==========================
Dim Uart_resive As Byte
Dim Uart_data As Byte
Dim Buffer(16) As Byte
Dim Display_buff(16) As Byte
Dim Counter_buff As Byte
Dim Sh As Byte
Dim Up As Byte
Dim Point As Bit
'Cursor Off
Cls
''=================='============== ==========================
On Urxc Serial_data_recive_by_uart0
Enable Urxc
Enable Interrupts
''====================================== ========================
Do
Locate 1 , 1
Lcd Hex(buffer(1))
Locate 1 , 3
Lcd Hex(buffer(2))
Locate 1 , 5
Lcd Hex(buffer(3))
Locate 1 , 7
Lcd Hex(buffer(4))
Locate 1 , 9
Lcd Hex(buffer(5))
Locate 1 , 11
Lcd Hex(buffer(6))
Locate 1 , 13
Lcd Hex(buffer(7))
Locate 1 , 15
Lcd Hex(buffer(8))
Loop
Serial_data_recive_by_uart0:
Stt:
While Ucsra.7 = 1
Buffer(counter_buff) = Udr
If Buffer(1) = 202 Then
Goto Buff
Else
Counter_buff = 1
Goto Stt
End If
Buff:
Incr Counter_buff
If Counter_buff = 9 Then
Counter_buff = 1
Goto En
End If
Wend
En:
Return
یک فریم 8 بایتی داریم که بایت آغازین آن عدد CA هگز است و بایت پایانی آن عدد 35 هگز است و بین این دو عدد 6 بایت اطلاعات هگز داریم .مثلا:
35 CA 25 4f 58 ff c2 5a
برای گرفتن این فریم اطلاعات برنامه زیر را پیشنهاد می کنم .توجهک بایت های 2 تا 7 متغیرندو تنها بایت های استارت و استپ ثابت هستند.
$regfile = "m32def.dat"
$crystal = 11059200
$baud = 38400
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 64
''====================================== ====================
Config Portb = Output
''====================================== =======================
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 2 , Databits = 8 , Clockpol = 0
''====================================== ===============
Config Lcd = 16 * 2
''====================================== ====================
Config Lcdpin = Pin , Db4 = Pinc.0 , Db5 = Pinc.1 , Db6 = Pinc.2 , Db7 = _
Pinc.3 , Rs = Pinc.4 , E = Pinc.5
''====================================== ==========================
Dim Uart_resive As Byte
Dim Uart_data As Byte
Dim Buffer(16) As Byte
Dim Display_buff(16) As Byte
Dim Counter_buff As Byte
Dim Sh As Byte
Dim Up As Byte
Dim Point As Bit
'Cursor Off
Cls
''=================='============== ==========================
On Urxc Serial_data_recive_by_uart0
Enable Urxc
Enable Interrupts
''====================================== ========================
Do
Locate 1 , 1
Lcd Hex(buffer(1))
Locate 1 , 3
Lcd Hex(buffer(2))
Locate 1 , 5
Lcd Hex(buffer(3))
Locate 1 , 7
Lcd Hex(buffer(4))
Locate 1 , 9
Lcd Hex(buffer(5))
Locate 1 , 11
Lcd Hex(buffer(6))
Locate 1 , 13
Lcd Hex(buffer(7))
Locate 1 , 15
Lcd Hex(buffer(8))
Loop
Serial_data_recive_by_uart0:
Stt:
While Ucsra.7 = 1
Buffer(counter_buff) = Udr
If Buffer(1) = 202 Then
Goto Buff
Else
Counter_buff = 1
Goto Stt
End If
Buff:
Incr Counter_buff
If Counter_buff = 9 Then
Counter_buff = 1
Goto En
End If
Wend
En:
Return
دیدگاه