реклама на сайте
подробности

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Плизззз VB\VC++ и ASM51 (нужна программа из 5 строк)
vet
сообщение Apr 10 2006, 09:36
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



Ну, если портится последний бит, логичнее всего предположить несовпадение скоростей приёма и передачи. Отрегулируйте baud-rate микроконтроллерного UART.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
IncreMan
сообщение Apr 10 2006, 11:38
Сообщение #17





Группа: Новичок
Сообщений: 9
Регистрация: 4-04-06
Из: Израиль
Пользователь №: 15 789



Не совсем последний бит, вместо 7Ah получил FAh, а вместо FFh получил 75h!

Вот код, сделал, но сейчас другая проблема, отправляю к примеру с компа 7Fh а получаю FAh, соответственно на экране не то что нужно, изза чего может быть такая фигня?
Код
Public line1HEX As String
Public line1spHEX As String
Public line1LCD As String
Public line1spLCD As String
Public line1 As String
Public line1len As String
Public line2hex As String
Public line2spHEX As String
Public line2LCD As String
Public line2spLCD As String
Public line2 As String
Public line2len As String
Public DataLCD As String
Public DataLCDlen As String
Public ix As Integer
Public iy As Integer
Public i1 As Integer
Public i2 As Integer

Private Sub Clear_Click()
    
    Text1.Text = ""
    Text2.Text = ""
    
    If MSComm1.PortOpen = False Then
       MSComm1.PortOpen = True
    End If
    
    MSComm1.Output = "                                " '32 space characters
    
End Sub

Private Sub Form_Load()
    
    MSComm1.CommPort = 1                'Set operating for COM1 port'
    MSComm1.Settings = "9600,n,8,1"     'Set operating on 9600bps, no parity, 8-bit, stop bit'
    If MSComm1.PortOpen = True Then
       MSComm1.PortOpen = False
    End If
    
End Sub

Private Sub Send_Click()
    
    DataLCD = line1LCD & line2LCD
    
    If MSComm1.PortOpen = False Then
       MSComm1.PortOpen = True
    End If
    
    DataLCDlen = Len(DataLCD)

    Dim result()
    ReDim result(DataLCDlen)

    For iy = 1 To DataLCDlen
        result(iy - 1) = Mid(DataLCD, iy, 1)
        result(iy - 1) = Asc(result(iy - 1))
        MSComm1.Output = result(iy - 1)
    Next
    
End Sub

Private Sub Text1_Change()

    line1HEX = ""
    line1spHEX = ""
    
    line1LCD = ""
    line1spLCD = ""
    
    line1 = Text1.Text
    line1len = Len(line1)

    If Text1.Text = "" Then
       Text3.Text = ""

    Else
        Dim result()
        ReDim result(line1len)

        For ix = 1 To line1len
            result(ix - 1) = Hex(Asc(Mid(line1, ix, 1)))
            line1HEX = line1HEX & result(ix - 1) & " "
        Next
            If line1len < 16 Then
               For i1 = line1len + 1 To 16
               line1spHEX = line1spHEX & Hex(32) & " "
               line1spLCD = line1spLCD & " "
               Next
               line1HEX = line1HEX & line1spHEX
               line1LCD = line1 & line1spLCD
            Else
               line1LCD = line1
            End If
    
        Text3.Text = line1HEX
      
    End If

End Sub

Private Sub Text2_Change()
    
    line2hex = ""
    line2spHEX = ""
    
    line2LCD = ""
    line2spLCD = ""
    
    line2 = Text2.Text
    line2len = Len(line2)

    If Text2.Text = "" Then
       Text4.Text = ""

    Else
        Dim result()
        ReDim result(line2len)

        For ix = 1 To line2len
            result(ix - 1) = Hex(Asc(Mid(line2, ix, 1)))
            line2hex = line2hex & result(ix - 1) & " "
        Next
            If line2len < 16 Then
               For i2 = line2len + 1 To 16
               line2spHEX = line2spHEX & Hex(32) & " "
               line2spLCD = line2spLCD & " "
               Next
               line2hex = line2hex & line2spHEX
               line2LCD = line2 & line2spLCD
            Else
               line2LCD = line2
            End If
    
        Text4.Text = line2hex

    End If
    
End Sub



Код
         ORG 0000H  
         LJMP START

         ORG 0100H
  START: MOV SP,#30H          ;magdir mahsanit le push ve pop ktovet 30h
         LCALL CLRLCD
         MOV DPTR,#1200H      ;agdarat ktovet le mahrozet rishona
         LCALL NEXT
         LCALL LINE2
         MOV DPTR,#1210H      ;agdarat ktovet le mahrozet shnia
         LCALL NEXT
         MOV TMOD,#00100000B    ; AGDARAT MODE2 LE TIMER1, AGDARAT EFSHUR ALYADEY TR1 BILVAD
         MOV SCON,#01010000B    ; AGDARAT SHIDUR 8-BIT, EFSHUR KABALA DEREH PORT TURI
         MOV TCON,#00000101B    ; AGDARAT DIRBUN KATZE
         MOV IE,#10010000B      ; ADLAKAT MAAREHET PSIKOT, ADLAKAT PSIKAT PORT TURI
         MOV IP,#00010000B      ; AGDARAT ADIFUT LE INTERRUPT0 HITZONI
         MOV TH1,#0FDH          ; AGDARAT ZMAN SHEL TIMER LE 9600BPS
         SETB TR1            ; AFALAT TIMER1      

    NEW: MOV R2,#32D
         MOV R1,#50H

   WAIT: JNB RI,WAIT            ; MEHAKE AD LE KABALAT NATUN, KAASHER MITKABEL 1 NATUN ITKABEL, PSIKA MUFELET
         MOV A,SBUF
         MOV @R1,A
         INC R1
         CLR RI
         DJNZ R2,WAIT
         LCALL SHOW2
         LJMP NEW
      $: SJMP $

  SHOW2: LCALL CLRLCD
         LCALL NEXT2
         LCALL LINE2
         LCALL NEXT3
         RET
        
  NEXT2: MOV R7,#16D          ;agdarat lulaa le 16 otiot shel shura
         MOV R1,#50H
   LAK2: CLR A
         MOV A,@R1
         LCALL WRTLCD
         INC R1
         DJNZ R7,LAK2
         RET

  NEXT3: MOV R7,#16D          ;agdarat lulaa le 16 otiot shel shura
         MOV R1,#60H
   LAK3: CLR A
         MOV A,@R1
         LCALL WRTLCD
         INC R1
         DJNZ R7,LAK3
         RET

   NEXT: MOV R7,#16D          ;agdarat lulaa le 16 otiot shel shura
    LAK: CLR A
         MOVC A,@A+DPTR
         LCALL WRTLCD
         INC DPTR
         DJNZ R7,LAK
         RET

CLRLCD: MOV A,#38H        ;agdarat rezolutziya
         LCALL COMMAND
         MOV A,#0CH        ;tadlik masah, tehabe saman
         LCALL COMMAND
         MOV A,#0DH        ;tadlik masah, saman meavhev
         LCALL COMMAND  
         MOV A,#01H        ;timhak masah, saman le athala
         LCALL COMMAND  
         MOV A,#02H        ;saman le athala
         LCALL COMMAND
         RET

COMMAND: PUSH DPL
         PUSH DPH
         CLR P1.0
         MOV DPTR,#2000H      ;agdarat ktovet masah
         MOVX @DPTR,A         ;haavarat milat bakara le masah
         LCALL DELAY
         POP DPH
         POP DPL
         RET

WRTLCD: PUSH DPH
         PUSH DPL
         SETB P1.0            ;bakaha le ktiva la masah
         MOV DPTR,#2000H      ;ktovet masah
         MOVX @DPTR,A         ;avarat tav me zikaron le masah
         LCALL DELAY
         POP DPL
         POP DPH
         RET

  LINE2: MOV A,#0C0H          ;agdarat saman be shura shnia
         LCALL COMMAND
         RET        
    
  DELAY: MOV R3,#05H
     L5: MOV R4,#0FFH
     DD: DJNZ R4, DD
         DJNZ R3,L5
         RET

DELAY1: LCALL DELAY
         LCALL DELAY
         LCALL DELAY
         RET

         ORG 1200H
         DB  'THE NEW LEVEL OF'
         ORG 1210H
         DB  '-ADVERTISEMENT!-'

    SOF: SJMP $
         END


Формула настройки таймера (TH1)

speedinbaud=[(2^smod)/32]*[Fosc/(12(256-TH1))]

smod = 0 или 1 (0 single rate, 1 double rate)
Fosc = 11.0592Mhz
speedinbaud = 9600

соответственно TH1 = 253 dec или FD hex

А вот например эта прога которая отправляет из МК в комп работает нормально

Код
         org 0000h
         ljmp start

         org 0100h
start: mov tmod,#20h
         mov scon,#01000000b
         mov th1,#0fdh
         setb tr1
    ho: mov a,#'y'
         mov sbuf,a
         jnb ti,$
         clr ti
         mov a,#'e'
         mov sbuf,a
         jnb ti,$
         clr ti
         mov a,#'s'
         mov sbuf,a
         jnb ti,$
         clr ti
         sjmp ho
         end


Сообщение отредактировал IncreMan - Apr 10 2006, 11:41


--------------------
..:: Deeds Talk Loud Than Words ::..
Go to the top of the page
 
+Quote Post
Muxamor
сообщение Apr 11 2006, 04:38
Сообщение #18


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 4-05-05
Из: Novosibirsk
Пользователь №: 4 722



Скорей всего скорости другой причины нету !
У меня такойже глюк был ! С приходом символа запускадлсь еще одна подпрограмма ! За счет этого МК не успевал! выризал подпрограмму и все стало нармально!


--------------------
Бубен - однако штука шаманская!!!

Go to the top of the page
 
+Quote Post
IncreMan
сообщение Apr 11 2006, 07:13
Сообщение #19





Группа: Новичок
Сообщений: 9
Регистрация: 4-04-06
Из: Израиль
Пользователь №: 15 789



Ты прав,
может ли быть такое,что МК получил прерывание, начинает его выполнять и ещё до момента как RI сбрасывается комп отправляет второй символ, и получается, что МК не закончив одно прерывание начинает второе, из-за этого портится значение.
Если это так, то возможно какое нужно задать время ожидания между отправляемыми знаками?
(я имею ввиду в программе на ВБ)


--------------------
..:: Deeds Talk Loud Than Words ::..
Go to the top of the page
 
+Quote Post
giran
сообщение Apr 11 2006, 12:06
Сообщение #20





Группа: Новичок
Сообщений: 12
Регистрация: 18-07-05
Пользователь №: 6 878



Кусок кода из рабочей программы:
Код
;===================================================================
; передача символа по протоколу RS232, скорость 9600, data = 8, nonparity,
; 1 stopbit, 4 Мгц, символ в R1
;===================================================================
COMM
    MOVWF    R1
     movlw .8
     movwf R0
     bcf  PORTA,TxD                          ; стартовый бит
     call delay_95mks
     call delay_8mks
    
m_PutChar_RS232_01              ; данные
     rrf R1                    ;в R1-байт на передачу
     btfss STATUS,C
     bcf  PORTA,TxD
     btfsc STATUS,C
     bsf  PORTA,TxD                      
     call delay_95mks  
     decfsz R0,f
     goto m_PutChar_RS232_01

     bsf  PORTA,TxD                           ; стоповый бит
     call delay_95mks
     call delay_8mks
;    rrf Char_RS232, f
     return

delay_95mks
     movlw .22
     movwf  TEMP
     nop
     decfsz TEMP, f
     goto $-2
     nop
     nop
     return

delay_8mks
     nop
     nop
     nop
     nop
     return

а вообще, зацикли посылку байта и посмотри осциллографом, и сразу будет понятно, где теряются биты
Go to the top of the page
 
+Quote Post
miga
сообщение Apr 11 2006, 23:19
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 117
Регистрация: 6-04-05
Пользователь №: 3 928



Цитата(giran @ Apr 11 2006, 16:06) *
Кусок кода из рабочей программы ...


И какое это имеет отношение к ASM51?
Go to the top of the page
 
+Quote Post
giran
сообщение Apr 12 2006, 02:10
Сообщение #22





Группа: Новичок
Сообщений: 12
Регистрация: 18-07-05
Пользователь №: 6 878



Цитата(miga @ Apr 12 2006, 05:19) *
И какое это имеет отношение к ASM51?

Извиняюсь, попутал слегка.
Go to the top of the page
 
+Quote Post
Viktor_
сообщение Apr 14 2006, 06:18
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 73
Регистрация: 13-01-06
Из: Томск
Пользователь №: 13 123



Вообщем правильно тебе говорят забей на всё пиши в Гипере или, что намного намного лучше из програмки Теликс(если что у меня есть, где то 1 метр весит). А вообше у мен ztcnm своя прога которая посылае данные через ком порт. Тут самое главное организовать свой протокол передачи, короче некоторые вспомогательные символы которые будут говорить контроллеру о том что сейчас будут идти символы и после говорить что всё - конец символам. Для этого я испльзовал символы которые в природе не используются - например символ с кодом 01. Вообщем если тебе нужно передать четыре цыфры: 1, 2, 3, 4, на ком порт ты посылаешь следующую последовательность : 01 31 32 33 34 01. (31 - код "1", и т.д.)
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 14th July 2025 - 21:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01464 секунд с 7
ELECTRONIX ©2004-2016