Verwendung von Timern 8051 Assembly Microcontroller

Ich teste ein einfaches Timer-Beispiel in keil (8051 ), wenn ich diesen Code debugge

org 0
MOV TH0,#76
MOV TL0,#01
MOV TMOD,#01
SETB TR0
JNB TF0,$
end

Ich bekomme den Fehler

    error 65 access violation at c: 0x000e no execute read permission

Bitte, ich brauche Hilfe, um dieses Problem zu lösen

Antworten (2)

Sie haben hier einen klassischen Fehler. Sie haben keine Vorkehrungen getroffen, was Ihr Programm ausführen soll, nachdem Sie die Adresse 0x000E erreicht haben.

Hier schau mal:

C:0x0000    758C4C   MOV      TH0(0x8C),#0x4C
C:0x0003    758A01   MOV      TL0(0x8A),#0x01
C:0x0006    758901   MOV      TMOD(0x89),#0x01
C:0x0009    D28C     SETB     TR0(0x88.4)
C:0x000B    308DFD   JNB      TF0(0x88.5),C:000B
C:0x000E    ????     ???      ??? ???

Nur weil Sie eine "End"-Anweisung in Ihren Assembler-Quellcode einfügen, bedeutet dies nichts für den 8051-Laufzeitkern, der versucht, Anweisungen abzurufen.

Debug->Memory Map, stellen Sie sicher, dass die Memory Map richtig für Lesen/Schreiben aktiviert ist (z. B. 0x0000 bis 0xFFFF)

Sehen Sie sich Michaels Antwort an, warum die Debug-Map Ihren nicht initialisierten Speicher nicht abdeckt. Eine genaue Debugging-Sitzung würde der CPU folgen, während sie fröhlich ausführt, was auch immer (möglicherweise zufällige oder 0xFF-Bytes) im Programmspeicher nach Ihrem Programmfragment ist. 0xFF ist MOV R7,A.