EM chỉ biết viết ASM thui . Giờ ko biết viết C như thế nào . Bác nào bớt chút thời gian hướng dẫn em các lệnh tương ứng giữa ASM và C với . Thankss các bác nhìu nhìu
Thông báo
Collapse
No announcement yet.
Bác nào giúp em cách chuyển các lệnh từ ASM sang Keil C với
Collapse
X
-
chắc bro phải đọc wa trình dịch Keil thì mới viết đc = Keil C . Tuy cũng là dạng ngôn ngữ C nhưng mỗi trình dịch lại có mỗi cách viết khác nhau !
Bro post thử code ASM lên để a e chuyển giúp cho ! Nhớ chú thích cho dễ hiểu ! vì đặc trưng của ASM phải có sơ đồ thuật toán , thì đọc mới hiểu đc !
-
Các bác giúp chuyển từ ASM sang Keil C!!!
1. Chuong trinh ngat TOISR
TOISR:
CLR TR0 ; dung bo dem
DJNZ R1,SS; R1=0? Neu chua, nhay toi SS
JB 04H,TA; Kiem tra dieu kien tra lenh=1 nhay toi TA
JNB 07H,TO4; Kiem tra dieu khien TEST, 07H=0 ?
TEST:
MOV R1,#20; nap lai gia tri cho thanh ghi R1
INC R0; tang gia tri thanh ghi R1
CJNE R0,#12,TO3; kiem tra R0=12?
MOV R0,#0; Neu R0=12, nap lai R0=0
TO3:
JC TO4; Neu R0>12
MOV R0,#0; Nap lai R0=0
TO4:
ACALL HTHI; Goi chuong trinh hien thi
JB 07H,TO5; Kiem tra lai dieu kien TEST
MOV R1,#50;
CJNE R0,#12,NHA; R0=12? Neu khac se nhay toi NHA
SJMP SS; Neu R0=12 thuc hien thu tuc ket thuc CTN
NHA:
JC HA; Neu R0>12 thuc hien thu tuc ket thuc CTN
SJMP SS;
HA:
DJNZ R2,TTA; R2=12? Neu khac 0 se nhay toi TTA
CLR P1.4; Tat chuong
MOV R2,#3; Nap lai R2=3
TTA:
SETB 04H; dao bit dieu khien tra lenh
SJMP SS ; Nhay ve doan ket thuc CTN
TA:
MOV P0,#00; Tat tat ca cac den
MOV P1,#00;
MOV R1,#50; Nap lai gia tri R1
CLR 04H; Dao bit dieu khien tra lenh
TO5:
SETB P1.4; Rung chuong
SS:
JNB 05H,ACT41; Kiem tra su co
SETB P1.5; Neu co bat den su co, nap lai bo dem va thaot
ACT41:
CLR P1.5; Tat den su co
MM:
MOV TL0,#0EFH; Nap lai gia tri bo dem
MOV TH0,#0D*H;
SETB TR0; Khoi dong lai bo dem
RETI
2. Chuong trinh chi bao dau ra
HTHI:
MOV 02FH,A
MOV A,R0;
MOV DPTR,#300H; Nap dia chi bang dau ra cho tin hieu DPTR
MOVC A,@A+DPTR; Doc gia tri tu bang ra thanh ghi A
CJNE R0,#12,F: Nap R0=12?
SJMP ACT1; Nap neu R0=12 nhay toi ACT1
F:
JC F3; R0>12 hoac R0<12?
CJNE R0,#19,F1; Neu R0>12 kiem tra R0=19?
SJMP ACT1; Neu R0=19
F1:
JC F2; Neu R0>19 hoac R0<19?
SJMP ACT2; Neu R0>19
F2:
SJMP ACT1; Neu R0<19
F3:
CJNE R0,#7,F4; Neu R0<12 kiem tra R0=7?
SJMP ACT1; Neu R0=7
F4:
JC ACT2; Nap R0<7
SJMP ACT1; Neu R0>7
ACT1:
MOV P0,A
MOV P1,#0; Xoa P1
MOV A,02FH; Lay lai gia tri thanh ghi A
RET
ACT2:
MOV P1,A
MOV P0,#0
MOV A,02FH
RET
3. Chuong trinh su co
EMER:
JB P3.3,EXIT2; Thoat ra neu P3.3=1
CLR IE.7; Cam ngat toan cuc
STAND1:
ACALL DELAY; Doi den khi nut an duoc nha
JNB P3.3,STAND1; Lap lai neu P3.3=0
JB 03H,TO11; 03F=1 nhay to TO11
SETB 05H; Dat dieu kien su co
CLR 03H; Dat off chp nut an
SETB IE.7; Cho phep ngat toan cuc
RET
TO11:
CLR 05H; huy dieu kien su co
SETB 03H ; Dat ON cho nut an
SETB IE.7 ; Cho phep ngat toan cuc
EXIT2:
RET
4. Chuong trinh TEST
TEST:
JB P3.2,EXIT1; Thoat ra neu P3.3=1
CLR IE.7; Cam ngat toan cuc
STAND:
ACALL DELAY; doi den khi nut an duoc nha
JNB P3.2,STAND; Lap lai neu P3.2=0
JNB 06H,TO1; 06F=0 nhay toi TO1
MOV A,R0; Luu Ro vao thanh ghi A
MOV 02EH,A; Cat gia tri R0 vao ngan xep
MOV R1,#20; Nap gia tri cho R1
SETB 07H; Dat dieu kien cho TEST
CLR 06H; Dat Off cho nut an
SETB IE.7; Cho phep ngat toan cuc
RET
TO1:
MOV A,02EH
MOV R0,A
MOV R1,#50
CLR 07H; huy dieu kien su co
SETB 06H; Dat On cho nut an
SETB IE.7; Cho phep ngat toan cuc
EXIT1:
RET
Comment
-
Hic ! viết ASM có cực là vậy đó ! bạn chú thích giống như ng ta đọc từng câu lệnh vậy ! ko ai chú thích kiểu ấy hết ! Muốn đọc & hiểu code của ASM , chỉ cần chú thích ngay dòng lệnh đầu tiên mình sẽ làm gì .
Code:#include<AT89C51.h> // nhập file này vào vì nó đn sẵn các thanh ghi & port trong MCU int8 R1 = giá trị ; // khai báo biến R1 & giá trị kèm theo nếu muốn , mình chọn tên biến giống tên thanh ghi cho bạn dễ theo dõi void T0ISR() using 1 // đoạn ct ngắt timer 0 { TR0 = 0 ; while(R1>0) { R1-- ; if( bít 05H ==0) {P1_5 = 1 ;}; };
Comment
-
đóng gói
nếu code asm dã được kiểm tra và hoạt động tốt thì bạn nên đóng gói phần code assembly này, sử dụng từ khóa #pragma asm và #pragma endasm. code viết bằng assembly sau khi đóng gói sẽ nhúng vào project của bạn bằng lệnh gọi chương trình con(hay là gọi ngắt). những khai báo về thanh ghi trong asm, sử dụng từ khóa DB, sẽ được khai báo bién trong C với từ khóa volatile. làm như vậy sẽ nhanh hơn là dịch từng dòng lệnh từ asm sang C. chúc thành công nhé.
Comment
Bài viết mới nhất
Collapse
-
bởi chinhnguyen9Mạch một cấp switching 4s sẽ có 7 tụ và 8 mosfet. Mạch 2 cấp switching 4s sẽ có 12 tụ và 16 mosfet (theo ảnh 1)
Mạch thứ nhất đã có 1 bài viết mô tả, mạch thứ 2 được giới thiệu trong bài viết này
Sơ đồ nguyên lý theo hình 2
Nhận xét: mạch switching 2 cấp rất hoàn...-
Channel: Điện tử dành cho người mới bắt đầu
hôm nay, 09:27 -
-
bởi FschoolvnTrong bối cảnh toàn cầu hóa giáo dục, ngày càng nhiều học sinh được gia đình chắp cánh để truy cầu kiến thức từ các quốc gia phát triển, đặc biệt là Hoa Kỳ. Từ ước mơ thụ hưởng nền giáo dục chất lượng, không ít học sinh nhìn...01-05-2024, 00:54
-
Trả lời cho Hỏi xin sơ đồ tivi các loạibởi Trân thànhCần các Bạn giúp sơ đồ Lcd Samsung UA40JU6400 và UA43ku6500k. Xin cảm ơn!...
-
Channel: Điện tử truyền hình
28-04-2024, 16:07 -
-
Trả lời cho Hỏi xin sơ đồ tivi các loạibởi Trân thànhCần các Bạn giúp sơ đồ Lcd Samsung UA40JU6400 và UA43ku6500k. Xin cảm ơn!...
-
Channel: Điện tử truyền hình
28-04-2024, 16:01 -
-
bởi chinhnguyen9Hoạt động của thế hệ mạch cân bằng trước đây dựa trên nguyên lý so áp giữa 2 string liền kề. Hoạt động cân bằng chỉ kích hoạt khi sự chênh lệch vượt ngưỡng 100mV và ngưng hoạt động khi mức chênh lệch giảm xuống còn 30mV. Bản...
-
Channel: Điện tử dành cho người mới bắt đầu
27-04-2024, 05:07 -
-
bởi chinhnguyen9Xem hình minh họa có phần thuyết minh bên trong tiện việc quan sát và đọc thuyết minh. Khi G1 high dòng điện chạy theo các đường màu đen khi G2 high dòng điện chạy theo các đường màu nâu đỏ.
Bổ sung một tính chất củng cố cho tên gọi tụ bay: Trong mạch đề cập chỉ...-
Channel: Điện tử dành cho người mới bắt đầu
26-04-2024, 21:02 -
-
bởi chinhnguyen9Sản phẩm này ghi version 2.0 01-2024 MADE IN CHINA nhưng không thấy thương hiệu hình 1
Do 8 chân G của 8 mosfet được đấu song song thành 2 nhóm nên có cùng biên độ xung kích 12V. Nhưng Q1 và Q2 nằm cuối dãy, chân S cùa chúng có điện áp DC cao đến...-
Channel: Điện tử dành cho người mới bắt đầu
26-04-2024, 20:37 -
-
bởi xuanthiettivi em bị mất remote lỡ vào chế độ usb giờ không chọn lại source được. ai có file nạp cho em xin với ạ. Model 32HD957T2
-
Channel: Điện tử truyền hình
26-04-2024, 10:53 -
-
Trả lời cho Giải thích nôm na từ "tụ bay"bởi chinhnguyen9Đa tạ lời cảm ơn của bạn. Mến!
-
Channel: Hướng dẫn sử dụng diễn đàn
26-04-2024, 05:06 -
-
Trả lời cho Xin tư vấn về mạch cầu H cho inverter 1000wbởi thebinhzChắc là không được đâu bạn ơi
Quán ăn Vĩnh Yên-
Channel: Điện tử công suất
25-04-2024, 21:56 -
Comment