Keil Logo Arm Logo

Discussion Forum

How can i create a new device in the database?

Next Thread | Thread List | Previous Thread Start a Thread | Settings

Details Message
Read-Only
Author
Claudionor Santos
Posted
18-May-2012 13:00 GMT
Toolset
C51
New! How can i create a new device in the database?

Hello,
I work at CTI Design House -Brazil (http://www.cti.org.br) and we develop a microcontroller based on the 8051. However, our microcontroller uses registers that are not available in 80C51 listed in the database. I'm having problems when I try to build the target, this case the following message appears "VER_I2CSM_TX_1B_NEW.asm (130): error A1: ILLEGAL CHARACTER IN NUMERIC CONSTANT"
Here is the line indicated by the message.

mov  0E8, # 001h; </ pre>.

Can someone show me the solution to this problem?

Sincerely,
Claudionor Santos


Read-Only
Author
Gp F
Posted
18-May-2012 13:13 GMT
Toolset
C51
New! RE: How can i create a new device in the database?

what about this:

MOV 0E8H,#1
MOV 0xE8,#1
Read-Only
Author
Claudionor Santos
Posted
18-May-2012 13:38 GMT
Toolset
C51
New! RE: How can i create a new device in the database?

Thanks,
it is working now !

But have some warning messages, like that:

 *** WARNING L5: CODE SPACE MEMORY OVERLAP
    FROM:    0000H
    TO:      0002H
*** WARNING L1: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ?C_START
    MODULE:  STARTUP.obj (?C_STARTUP)
*** WARNING L2: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  ?C_START
    MODULE:  STARTUP.obj (?C_STARTUP)
    ADDRESS: 080AH
Read-Only
Author
erik malund
Posted
18-May-2012 14:25 GMT
Toolset
C51
New! this is ridiculous

we develop a microcontroller based on the 8051.

anyhow what ARE you doing?
mov 0E8, # 001h; is assembler and the error messages are from 'C'
is seems like/could be that you include startup.a51 in an assembler program

Erik

Read-Only
Author
Claudionor Santos
Posted
18-May-2012 14:43 GMT
Toolset
C51
New! RE: this is ridiculous

Erik

it is a assembly code.

full code :

#define         Result_final 0f8h
;*********** Tabela de EQU para as Variaveis em RAM
VEZES EQU 8 ; conta o número de vezes de interrupçao I2C

;********************************************************************
; ENDERECO DE DESVIO SAIDA DE RESET
cseg    at      0000h
AJMP    200h
;********************************************************************
; ENDERECO DE DESVIO DA INTERRUPCAO INT0
;cseg   at       0003h
;AJMP   0050h
;*********************************************************************
;********************************************************************
; ENDERECO DE DESVIO DA INTERRUPCAO DO TIMER/COUNTER 0
;cseg   at       000Bh
;AJMP   0050h
; ENDERECO DE DESVIO DA INTERRUPCAO DO INT1
;cseg   at  0013h
;AJMP   0070h
;*********************************************************************
;*********************************************************************
; ENDERECO DE DESVIO DA INTERRUPCAO DO TIMER/COUNTER 1
;cseg   at  001Bh
;AJMP   0070h
;*********************************************************************
; ENDERECO DE DESVIO DA INTERRUPCAO DO CANAL I2CSM
cseg    at 02Bh                 ; I2CSM interruption
AJMP    100h
;*********************************************************************
;*********************************************************************
; ENDERECO DE DESVIO DA INTERRUPCAO DO CANAL SERIAL
;cseg   at 0023h                        ;serial interruption
;               AJMP    0100h
;*********************************************************************
;*********************************************************************

cseg    at 100h
MOV     0F0h, 0E8h ; MOVES STATUS REG TO ACCUMULATOR
jb              0F1h,   msb_interrupt ; Status Register bit 1 - E8.1
jb              0F0h,   lsb_interrupt ; Status Register bit 0 - E8.0
jb              0F2h,   nack_interrupt ; Status Register bit 2 - E8.2
mov     R2, 0E8h
cjne    R2, #042h, test_lsb_interrupt
ajmp    msb_interrupt
test_lsb_interrupt:
cjne    R2, #041h, test_nack_interrupt
ajmp    lsb_interrupt
test_nack_interrupt:
cjne    R2, #044h, error_detected
ajmp    nack_interrupt
error_detected:
ajmp    error_02

msb_interrupt:
        mov             R0, 84h
        mov             0E8h, #80h ; FLAG Clear - E8    . Clear Interruption Flag
        inc     VEZES ; Incrementa o contador de interrupçoes
        cjne    R0, #0A2h, error_03
        reti

lsb_interrupt:
        mov             R0, 85h
        mov             0E8h, #80h ; FLAG Clear - E8    . Clear Interruption Flag
        inc     VEZES ; Incrementa o contador de interrupçoes
        cjne    R0, #0F8h, error_04
        setb    ACC.0
        reti

nack_interrupt:
        mov             R0, 84h
        mov             0E8h, #80h ; FLAG Clear - E8    . Clear Interruption Flag
        inc     VEZES ; Incrementa o contador de interrupçoes
        cjne    R0, #0F8h, error_04
        setb    ACC.1
        reti

error_02:
    mov     30h , R2
    mov     31h , 0E8h
    mov     Result_final, #003h         ;Interrupt error
error_03:
    mov     32h , R2
    mov     33h , 0E8h
    mov     Result_final, #003h         ;Recieve error
error_04:
    mov     34h , R2
    mov     35h , 0E8h
    mov     Result_final, #003h         ;Bit 8 receive error


;*********************************************************************
;       Configure 8031
;*********************************************************************
cseg    at  200h
SETUP_MCU:
    clr    RS0;
    clr    RS1;
    mov         R0, VEZES
    mov     A, R0
    CJNE    A,#0,MAIN_LOOP
    mov         PSW,    #00h    ; Move o valor do reg. PSW para 00h
    mov     IE,         #0C0h    ; Move o valor de C0h para IE, Habilita Interrupcao do I2CSM
    mov         PCON,   #000h
    mov     VEZES,  #001h   ; inicializa o contador de interrupcoes I2C
    mov         ACC,    #000h
;*********************************************************************
;       Start tranmission test
;*********************************************************************
 mov            0D8H,   #001h   ;--->>> Reg D8h não implementado  I2CSM Habilitado
 mov            0D9h,   #000h   ;--->>> Reg D9h não implementado   I2CSM Standard Mode  D9h
        mov             84h,    #0A2h   ;I2CSM Slave Address 0xA2 , Write Mode
        mov             85h,    #0F8h   ;I2CSM Write Data 0xF8
        mov     R5 ,  84h
        mov     R6 ,  85h
        mov     SP,     #10h
MAIN_LOOP:
    mov     R4 ,  0E8h
        CJNE    R4,#42,continue_MAIN_LOOP
        nop
        nop
        nop
    ajmp        error_01
continue_MAIN_LOOP:
        jnb             ACC.1, CHECK_I2C_LSB_INT_DONE;
        mov     R3, VEZES   ; CHECK_I2C_NACK_INTERRUPTION
        CJNE    R3,#02,error_01
        ajmp    test_completed
CHECK_I2C_LSB_INT_DONE:
        jnb             ACC.0, MAIN_LOOP;
        mov     R3, VEZES
        CJNE    R3,#03,error_01
test_completed:
        mov     Result_final, #001h             ;Test complet sussesfuly
error_01:
        mov     36h , R3
        mov     Result_final, #003h             ;Bit 8 receive error

        END

Read-Only
Author
erik malund
Posted
18-May-2012 15:01 GMT
Toolset
C51
New! the errors you get are, as I stated, typical for

startup.a51 included in the linking string

check the .map

Read-Only
Author
Claudionor Santos
Posted
18-May-2012 15:12 GMT
Toolset
C51
New! RE: the errors you get are, as I stated, typical for

thanks ,

i just could not understand when you wrote "this is ridiculous."

could you be clear ?

Read-Only
Author
erik malund
Posted
18-May-2012 15:36 GMT
Toolset
C51
New! C erriors in assembler

.

Read-Only
Author
Al Bradford
Posted
19-May-2012 00:05 GMT
Toolset
C51
New! RE: How can i create a new device in the database?

To answer the original question. You can modify some things in a device data base. First go to File -> Device DataBase... and open the dialog. Carefully select a device as near to your device as possible(carefully read the device descriptions). To make a copy of the existing device data base, change the name, device family and device type to your device names, etc. Modify the any data necessary and click the Update AND the the ADD button. At this point you can define the register .h files that you have created to define your register set. This is just your Regxxx.h file that you have created. You can change other device descriptions as necessary.

Now the real hard part. If you have peripherals not common to the device that you select to change, you must write your own peripheral types using the AGSI and/or the AGDI features in this toolset. These new tools will be written in C++ external to the Keil Tools and you will create a new .dll for your simulator. Templates are availble on this website.

All of this is described in detail in the PK51 User's Manuals at this website. You must read and study these manuals carefully to implement any serious changes to the Device Database.

Good Luck. You will need it.

Bradford

Read-Only
Author
Andrew Neil
Posted
19-May-2012 09:21 GMT
Toolset
C51
New! RE: How can i create a new device in the database?

This is described in the uVision Manual:

http://www.keil.com/support/man/docs/uv4/uv4_ca_cpu_ndatabase.htm

http://www.keil.com/support/man/docs/uv4/uv4_c_dd_parameters.htm

Next Thread | Thread List | Previous Thread Start a Thread | Settings

Keil logo

Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.